当我在阅读Google Protocol Buffers中的代码时,我发现了如下困惑的代码。
1 < 2 ? (void)0 : cout << "hi" << endl;
重点是字符串“hi”将通过左移运算符通过 NULL 传递。结果,什么也没有发生。这意味着这在语法上是正确的代码。
我尝试了一些不同的代码,如下所示。
(void)0 << "hi" << endl;
当然,它没有用。
最后,我尝试了这段代码。
string tmp;
cin >> (1 < 2 ? 0 : tmp);
它已编译但在运行时崩溃。 (如果符号被反转但输入不存储在 tmp 中,它会起作用。)
有没有人可以告诉我第一种情况会发生什么? (就编译器或低级别而言,如果可能的话)
最佳答案
你误会了,1 < 2 ? (void)0 : cout << "hi" << endl;
翻译成:
if(1 < 2) {
(void)0; //do nothing
} else {
cout << "hi" << endl;
}
condition ? true-state : false-state;
称为 ternary operator ,它绝对与<<
无关.
关于c++ - 关于 C++ 中的移位运算符技巧?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21717059/