我收到 clang-tidy 12.0.1 报告的相当奇怪的警告。在下面的代码中:
#include <vector>
int main()
{
std::vector<int> v1;
const auto a = v1.begin() + v1.size();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我看到这个警告被触发:
error: narrowing conversion from 'std::vector<int>::size_type' (aka 'unsigned long long') to signed type 'std::_Vector_iterator<std::_Vector_val<std::_Simple_types<int>>>::difference_type' (aka 'long long') is implementation-defined [bugprone-narrowing-conversions,cppcoreguidelines-narrowing-conversions,-warnings-as-errors]
const auto a = v1.begin() + v1.size();
^
Run Code Online (Sandbox Code Playgroud)
据我了解,当操作两个大小相同但符号不同的整数时,有符号整数将转换为无符号整数,而不是相反。我在这里错过了什么吗?
从 C++20 开始,一个简单的修复方法是使用std::sszie:
const auto a = v1.begin() + std::ssize(v1);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1086 次 |
| 最近记录: |