C++ size_t 混合算术和逻辑运算
C++ size_t in mixed arithmetic and logical operations
目前使用 WSL2,g++,-std=c++20 -Wall -Wextra -Wvla -Weffc++ -Wsign-conversion -Werror
。
在我正在构建的程序中,因为我使用了几个STL容器,例如std::vector
、std::array
、std::string
等,我遇到过很多涉及整数的情况size_t
(来自 .size()
或 .length()
)和有符号值之间的算术或逻辑比较。
为了避免发生错误,我将值(“我认为”通常应该始终为正值)更改为无符号值,方法是更改变量定义,或使用 static_cast<size_t>()
(这使我的代码线路特别长)。但是现在遇到越来越多的下溢错误。
我是否应该将所有变量改回有符号类型并使用断言来查看它们是否为负数?在有符号整数和无符号整数(尤其是来自.size()
)之间进行整数算术和逻辑比较的一些有效方法是什么?
不用调用成员函数size()
,您可以使用C++20 std::ssize()
获取有符号大小,以便与有符号整数进行比较和运算。
std::vector v{42};
auto size = std::ssize(v); // get signed size
目前使用 WSL2,g++,-std=c++20 -Wall -Wextra -Wvla -Weffc++ -Wsign-conversion -Werror
。
在我正在构建的程序中,因为我使用了几个STL容器,例如std::vector
、std::array
、std::string
等,我遇到过很多涉及整数的情况size_t
(来自 .size()
或 .length()
)和有符号值之间的算术或逻辑比较。
为了避免发生错误,我将值(“我认为”通常应该始终为正值)更改为无符号值,方法是更改变量定义,或使用 static_cast<size_t>()
(这使我的代码线路特别长)。但是现在遇到越来越多的下溢错误。
我是否应该将所有变量改回有符号类型并使用断言来查看它们是否为负数?在有符号整数和无符号整数(尤其是来自.size()
)之间进行整数算术和逻辑比较的一些有效方法是什么?
不用调用成员函数size()
,您可以使用C++20 std::ssize()
获取有符号大小,以便与有符号整数进行比较和运算。
std::vector v{42};
auto size = std::ssize(v); // get signed size