gpt4 book ai didi

C++ - unsigned long long 到有符号 long long 的隐式转换?

转载 作者:行者123 更新时间:2023-12-05 01:05:51 25 4
gpt4 key购买 nike

clang-tidy 12.0.1 报告了一个相当奇怪的警告。在以下代码中:

#include <vector>

int main()
{
std::vector<int> v1;

const auto a = v1.begin() + v1.size();

return 0;
}

我看到这个警告被触发了:

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();
^

据我了解,当操作两个大小相同但符号不同的整数时,有符号整数会转换为无符号整数,而不是相反。我在这里遗漏了什么吗?

最佳答案

从 C++20 开始,一个简单的修复方法是使用 std::sszie :

const auto a = v1.begin() + std::ssize(v1);

关于C++ - unsigned long long 到有符号 long long 的隐式转换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70275235/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com