在C++中OR运算符的未知行为

Sha*_*yar -4 c++ logic

我有这个代码偶然运行,当我把任何东西作为答案,它显示我是正确的.我知道我们必须在YES和yay之前放置ans,但是这个代码也被编译了,正如我提到的,如果我把任何单词作为输入输出是正确的:

string ans;
cin >> ans;

if(ans == "yes" || "YES" || "yay") {
    cout << "Correct";
}else {
    cout << "Incorrect";
}
Run Code Online (Sandbox Code Playgroud)

Jos*_* D. 5

好的,这里是逻辑运算符的优先级(L-> R)和关联性:

(((ans == "yes") || "YES") || "yay")

因为与Python不同,C/C++ 没有链接.

第一:ans == "yes"- > strstr比较

第二:bool result of 1st || "YES"- > boolstr比较=总是truefor "YES"不是null

第3名:true || "YES"=总是true

因此,病情总是会true"YES""yay"不为空.