c++ - 杀死无符号/有符号比较错误

标签 c++ comparison g++ suppress-warnings

一般来说,我想要未签名与已签名的警告。

但是,在这种特殊情况下,我希望它被抑制;

std::vector<Blah> blahs;

for(int i = 0; i < blahs.size(); ++i) { ...

我想取消这种比较。

谢谢!

(使用 g++)

最佳答案

你应该修复,而不是压制。使用无符号类型:

for (size_t i = 0; i < blahs.size(); ++i)

您也可以使用 unsigned,但是 size_t 在这里更合适(并且可能有不同的、更大的范围)。如果您只使用 i 进行迭代并且在循环中不需要它的值,请改用迭代器:

for (auto iter = blahs.begin(), end = blahs.end(); iter != end; ++iter)

如果你的编译器不支持auto,将auto替换为T::iteratorT::const_iterator,其中 Tblahs 的类型。但是,如果您的编译器支持更完整的 C++11 子集,请执行以下操作:

for (auto& element : blahs)

哪个最好。


严格来说,以上说法并不“正确”。应该是:

typedef std::vector<Blah> blah_vec;
blah_vec blahs;

for (blah_vec::size_type i = 0; i < blahs.size(); ++i)

但这可能会很冗长,而且我知道的每个实现都使用 size_t 作为 size_type


如果出于某种原因你确实需要一个带符号的整数类型用于i,你必须强制转换:

// assumes size() will fit in an int
for (int i = 0; i < static_cast<int>(blahs.size()); ++i)

// assumes i will not be negative (so use an unsigned type!)
for (int i = 0; static_cast<size_t>(i) < blahs.size(); ++i)

// and the technically correct way, assuming i will not be negative
for (int i = 0; static_cast<blah_vec::size_type>(i) < blahs.size(); ++i)

关于c++ - 杀死无符号/有符号比较错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2733125/

相关文章:

c++ - 为什么 std::sort 将元素与自身进行比较

linux - 无法在 Linux Mint 18 或 Ubuntu 16.04 上编译 a4tech-bloody-linux-driver

c++ - 使用 GCC 编译 C++ 程序

c++ - 这是有效的 C++ 代码吗?

c++ - 虚拟异常类导致动态链接器错误

c++ - 具有链接树结构的命令模式(使用指针)

c# - 比较两个文件名以查看它们是否是同一文件的正确方法是什么?

ruby-on-rails - 如何比较 RSPec 中的多个 RHS 值?

c++ 使用 *& 作为参数(指针乐趣,三级树方法)

c++ - 从 XML 解析字符串时向 n 添加额外的反斜杠