C ++:比较运算符的意外结果>和字符串文字

时间:2017-08-21 13:27:38

标签: c++ pointers

在C ++中,std :: string类实现comparison operators。 以下代码打印AAA

#include <iostream>
using namespace std;
int main() {

    if("9">"111")
        cout << "AAA";
    else 
        cout << "not AAA";

    return 0;
}

并且此代码段打印not AAA

#include <iostream>
using namespace std;
int main() {

    if("9">"111")
        cout << "AAA";
    else 
        cout << "not AAA";

    if("99">"990")
        cout << "BBB";

    return 0;
}

为什么会这样?

1 个答案:

答案 0 :(得分:5)

您正在比较静态持续时间存储上某处的字符串文字的地址,并且它具有未指定的行为。

像这样使用std::string

#include <iostream>
using namespace std;
int main() {

    if(std::string("9") > std::string("111"))
        cout << "AAA";
    else 
        cout << "not AAA";

    return 0;
}

修改

使用using namespace std::literals;可以使用&#34; 9&#34; s&#34; 111&#34; s。

谢谢@ sp2danny