当参数是数组时,C++如何开始和结束工作



C++入门中的一个问题是,当开始和结束对向量的工作时,我知道有vector::size()可能会有所帮助,但当我只给出一个数组参数时,它们是如何工作的。就像:

int arr[] = {1, 2, 3};
size = end(arr) - begin(arr);

结束和开始如何正确工作?

为了了解std::end是如何工作的,我们可以看看std::end是如何知道数组的末尾的?并且看到CCD_ 1的签名是:

template< class T, std::size_t N >
T* end( T (&array)[N] );

并且它使用模板非类型参数来推导数组的大小,并且它只是指针算术的问题来获得结束:

return array + N ;

对于std::begin,签名是相同的,除了名称:

template< class T, std::size_t N >
T* begin( T (&array)[N] );

计算数组的开始只是数组到指针衰减的问题,这给了我们一个指向数组第一个元素的指针。

在C++14中,这两者都变为constexpr。

我将从这里粘贴一段代码

template <class _Tp, size_t _Np>
inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11
_Tp*
begin(_Tp (&__array)[_Np])
{
    return __array;
}
template <class _Tp, size_t _Np>
inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11
_Tp*
end(_Tp (&__array)[_Np])
{
    return __array + _Np;
}

相关内容

最新更新