这个问题显然不是重复这个.在这里,在原来的页面,我发现这两个代码片段似乎给矛盾的原因,我的目标是获得一个清晰而不仅仅是了解什么是给出这个.
我有多少次编辑此问题以说服每个人这个问题与此不重复.请完整阅读我的问题以及我提供的参考页面.他们在那里解释错了,我需要澄清那个.一般来说,不是了解cout.
我在这个页面中遇到了以下两个代码片段.
第一个片段:
#include <iostream>
using namespace std;
int main()
{
int test = 0;
cout << test ? "A String" : 0 << endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
第二个片段:
#include <iostream>
using namespace std;
int main()
{
int test = 0;
cout << (test ? "A String" : 0) << endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
它说第一个代码片段肯定会抛出编译错误,但第二个代码片段可能编译也可能不编译.
我认为这两者没有任何区别.请解释差异,如果有的话.在页面的解释中,他们似乎给出了相互矛盾的理由.我需要清楚那一个.
我不明白为什么这个问题继续得到负面投票,而没有人将其标记为重复,也没有人正确回答.
使用运算符优先级,
cout << test ? "A String" : 0 << endl;
Run Code Online (Sandbox Code Playgroud)
是
(cout << test) ? "A String" : (0 << endl);
Run Code Online (Sandbox Code Playgroud)
使用无效0 << endl(而不是三元的预期条件).
而
cout << (test ? "A String" : 0) << endl;
Run Code Online (Sandbox Code Playgroud)
是你所期待的.
三元运算符的类型将const char*是以下常见类型:
"A String"(const char[9]).0(static_cast<const char*>(nullptr)在那种情况下,而不是一个int).