C++ string size_t

nig*_*ils 2 c++ runtime-error g++ size-t

以下代码按预期工作,即它反向打印字符串

std::string s("abcd");

for (int i=s.length()-1; i>=0; --i) {
    std::cout << s[i];
}
Run Code Online (Sandbox Code Playgroud)

但是,以下代码进入无限循环打印垃圾字符,最后崩溃 -

std::string s("abcd");

for (std::size_t i=s.length()-1; i>=0; --i) {
    std::cout << s[i];
}
Run Code Online (Sandbox Code Playgroud)

为什么使用崩溃的程序size_t类型i

我在Windows上使用MinGW附带的g ++

C:/MinGW/bin/g++ --version
g++ (GCC) 6.1.0
Run Code Online (Sandbox Code Playgroud)

Ed *_*eal 8

这是因为std::size_t无法存储负数,因此条件始终为真