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