C/C++:如果解析这个内联怎么样?

Pau*_*nta 4 c++ ternary-operator

考虑以下代码:

int main()
{
    cout << true ? "Yes" : "No";
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

它的输出将是1,不会YesNo.为什么它true被发送到输出流而不是YesNo字符串?如果得到解析,内联的其余部分如何?

Lou*_*nco 10

它与操作顺序有关.它与以下相同:

  (cout << true) ? "Yes" : "No";
Run Code Online (Sandbox Code Playgroud)

cout << true返回一个ostream&,必须转换为bool或等价物.结果?:被扔掉了.

如果这看起来很奇怪(为什么这个优先级?),请记住ostream operator<<是C++代码中引入的重载,它不允许优先级更改.优先级<<是针对位移有意义的.它作为流媒体运营商的使用来得晚得多.

编辑:可能转换为(void*)使用此:http: //www.cplusplus.com/reference/iostream/ios/operator_voidpt/

  • 将三元运算符放在括号中几乎总是一个好主意,它通常有助于提高可读性:`cout <<(true?"是":"否"); (2认同)