C++ 字符串 size_t
C++ string size_t
以下代码按预期工作,即反向打印字符串
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
无符号类型永远不会有负值。因此,有条件的
i>=0
将始终评估为 true
。
这是因为std::size_t
不能存储负数,所以条件总是为真
以下代码按预期工作,即反向打印字符串
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
无符号类型永远不会有负值。因此,有条件的
i>=0
将始终评估为 true
。
这是因为std::size_t
不能存储负数,所以条件总是为真