C++入门中的一个问题,当向量上的开始和结束工作我知道有vector :: size()可能会有所帮助,但是当我给出一个数组参数时它们是如何工作的.就像:
int arr[] = {1, 2, 3};
size = end(arr) - begin(arr);
Run Code Online (Sandbox Code Playgroud)
end(arr)和begin(arr)如何正常工作?
因此,要了解std::end 的工作原理,我们可以查看std::end 如何知道数组的结尾?并看到签名是std::end
:
template< class T, std::size_t N >
T* end( T (&array)[N] );
Run Code Online (Sandbox Code Playgroud)
它使用模板非类型参数来推断数组的大小,只需进行指针算术即可获得结尾:
return array + N ;
Run Code Online (Sandbox Code Playgroud)
签名std::begin
相同,但名称除外:
template< class T, std::size_t N >
T* begin( T (&array)[N] );
Run Code Online (Sandbox Code Playgroud)
计算数组的开头只是数组到指针衰减的问题,它为我们提供了指向数组第一个元素的指针。
在 C++14 中,它们都变成了 constexpr。