当参数是数组时,C++如何开始和结束工作
How does the C++ begin and end work when argument is an array?
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;
}
相关文章:
- 当回溯以零开始时,如何调试崩溃
- QSqlquery prepare()和bindvalue()不工作
- 导入库可以跨dll版本工作吗
- 以螺旋方式打印矩阵的程序.(工作不好)
- 对象指针在c++中是如何工作的
- 为什么在Windows上的VS 2019和Clang 9中"size_t"在没有标题的情况下工作
- VSOMEIP-2个设备之间的通信(TCP/UDP)不工作
- 为字符串中每 N 个字符插入空格的函数没有按照我认为的方式工作?
- C++为线程工作动态地分割例程
- 为什么我的 std::ref 无法按预期工作?
- 布尔比较运算符是如何在C++中工作的
- onTouch开始不工作cocos2dx
- 不明白为什么这个简单的递归开始工作然后崩溃
- 从2011年开始,必须在2019年开始工作以使此Windows Textbox做出哪些更改
- 简单的cin cout代码由"build and run"运行,但从bin/debug/x开始工作.exe
- Rand从一个最大值为75的数字(36)开始时是如何工作的
- 如果旧工作已经完成,如何开始新工作
- 当参数是数组时,C++如何开始和结束工作
- Qt程序挂起(不响应),直到函数结束,然后再次开始工作
- 当代码在没有真正更改的情况下意外地开始工作时