C++ 终止无符号/有符号比较错误

C++ 终止无符号/有符号比较错误,c++,comparison,g++,suppress-warnings,C++,Comparison,G++,Suppress Warnings,一般来说,我想要未签名与已签名的警告 然而,在这种特殊情况下,我希望它被抑制 std::vector<Blah> blahs; for(int i = 0; i < blahs.size(); ++i) { ... std::vector blahs; 对于(inti=0;i

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

然而,在这种特殊情况下,我希望它被抑制

std::vector<Blah> blahs;

for(int i = 0; i < blahs.size(); ++i) { ...
std::vector blahs;
对于(inti=0;i
我想消除这种比较

谢谢


(使用g++)

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

for (size_t i = 0; i < blahs.size(); ++i)
如果您的编译器不支持
auto
,请将
auto
替换为
T::iterator
T::const_iterator
,其中
T
blahs
的类型。但是,如果您的编译器支持更完整的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)
typedef std::vector<Blah> blah_vec;
blah_vec blahs;

for (blah_vec::size_type i = 0; i < blahs.size(); ++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)