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)