C++自执行一个标准:size_t
C++ self-enforcing a standard: size_t
简单问题,强制自己在处理数组或其他大型数据结构时通常使用int的地方开始使用size_t(或无符号的longs?),这对我来说有好处吗?
假设你有一个矢量指针:
auto myVectorPtr = myVector;
您不知道,此矢量的大小大于:
std::numeric_limits<int>::max();
你有一个循环:
for(int i = 0; i < myVectorPtr->size(); ++i)
使用不是更好吗
for(size_t i = 0; i < myVectorPtr->size(); ++i)
以避免溢出?
我想我的问题是,在算术和其他常见操作中使用size_t(或无符号long?)是否有任何副作用。如果我开始使用size_t(或无符号的longs?)而不是经典的int.
size_t
肯定比int
好。最安全的做法是使用容器的实际size_type
,例如:
for( typename decltype(*myVectorPtr)::size_type i = 0; i < myVectorPtr->size(); ++i )
不幸的是,这里不能使用auto
,因为它将从0
而不是从size()
调用推导其类型。
使用迭代器或基于范围的接口读起来有点好:
for (auto iter = begin(*myVectorPtr); iter != end(*myVectorPtr); ++iter)
或
for (auto &&item : *myVectorPtr)
相关文章:
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 使用CMake检测支持的C++标准
- 如何理解C++标准N3337中的expr.const.cast子句8
- "throw expression code" 1e7 >返回 d 是什么?投掷标准::overflow_error( "too big" ) : d;意味 着?
- 大于65535的C++数组[size]引发不一致的溢出
- 编译标准库类型
- 标准是否使用多余的大括号(例如 T{{{10}}})定义列表初始化?
- 为什么(-1)%vector::size()总是返回0
- 在for循环中使用auto vs decltype(vec.size())来处理字符串的向量
- 编译器如何在使用SFINAE的函数和标准函数之间确定两者是否可行
- 铸造标准::有没有回到原来的类型
- 循环中的条件:为什么每次都调用strlen(),而vector.size()只调用一次
- 标准 N3337 5.2.10 第 7 条中的C++"类型"是什么意思?
- this_thread::sleep_for和计时时钟之间的关系是否由C++11标准指定
- 标准库类型的赋值运算符的引用限定符
- 标准是否严格定义了该程序应该如何编译?
- 如何从Windows应用程序输出到标准?
- 安全到标准:移动会员?
- 瓦尔格林德:在字符[]到标准::向量迁移之后"Invalid write of size 1"<char>
- 标准::位集中<size>的可变位长度