以下代码按预期工作,即它以反向打印字符串
std::string s("abcd");
for (int i=s.length()-1; i>=0; --i) {
std::cout << s[i];
}
然而,以下代码进入无限循环打印垃圾字符,最后崩溃 -
std::string s("abcd");
for (std::size_t i=s.length()-1; i>=0; --i) {
std::cout << s[i];
}
为什么使用size_t
作为i
的类型会导致程序崩溃?
在Windows上使用MinGW附带的g ++
C:/MinGW/bin/g++ --version
g++ (GCC) 6.1.0
答案 0 :(得分:8)
这是因为std::size_t
无法存储负数,因此条件始终为真
答案 1 :(得分:4)
无符号类型永远不会有负值。因此,有条件的
i>=0
将始终评估为true
。