C++ size_t 混合算术和逻辑运算

ZzX*_*SZD 0 c++ size-t type-conversion

目前使用 WSL2、g++、以及-std=c++20 -Wall -Wextra -Wvla -Weffc++ -Wsign-conversion -Werror.

在我正在构建的程序中,因为我使用了多个 STL 容器,例如std::vectorstd::arraystd::string等,所以我遇到了许多涉及size_t(from.size().length()) 和有符号值之间的整数算术或逻辑比较的情况。

为了避免发生错误,我已将值(“我认为”通常应始终为正)更改为无符号值,方法是更改​​变量定义或使用static_cast<size_t>()(这使我的代码行特别长)。但现在我遇到越来越多的下溢错误。

我是否应该将所有变量更改回有符号类型并使用断言来查看它们是否变为负数?有哪些有效的方法可以在有符号整数和无符号整数(尤其是.size())之间进行整数算术和逻辑比较?

康桓瑋*_*康桓瑋 5

size()您可以使用 C++20来std::ssize()获取有符号大小,以便与有符号整数进行比较和运算,而不是调用成员函数。

std::vector v{42};
auto size = std::ssize(v); // get signed size
Run Code Online (Sandbox Code Playgroud)