c++ - 三元运算符

标签 c++ ternary-operator

是否有任何逻辑原因可以解释为什么在三元选择器中两个分支必须具有相同的基本类型或可转换为一个?没有这个规则有什么问题?为什么我不能这样做(这不是最好的例子,但阐明了我的意思):

int var = 0;

void left();
int right();

var ? left() : right();

最佳答案

表达式必须有一个在编译时已知的类型。不能有“X 或 Y”类型的表达式,它必须是其中之一。

考虑这种情况:

void f(int x) {...}
void f(const char* str) {...}

f(condition ? 5 : "Hello");

将调用哪个重载?这是一个简单的案例,还有更复杂的案例,例如模板,必须在编译时知道。所以在上面的例子中,编译器不会根据条件选择重载,它必须选择一个重载来始终调用。

它不能那样做,所以三元运算符的结果必须始终是相同类型(或兼容)。

关于c++ - 三元运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4693629/

相关文章:

javascript - 使用三元运算符处理三种不同的情况

java - php 与 java 中的嵌套三元运算符关联性

c - 收到错误 : cannot take the address of an rvalue of type 'int'

c - C语言输出字符串的三元运算

c++ - 在 C++ 中传递回调函数参数的最佳方法

c++ - 在 C++ 服务和用户模式应用程序崩溃后收集崩溃的 .dmp 和 .hdmp 文件

c++ - 如何将 gcc 调试符号从 .so 和 .a 文件中移出?

c++ - -lglut32 找不到

c++ - C++全局 namespace 成员已定义错误

javascript - AngularJS:三元运算符条件检查中的函数调用