Ternary operator

自闭症网瘾萝莉.ら 提交于 2019-11-29 11:52:59

Expressions must have a type known at compile time. You can't have expressions of type "either X or Y", it has to be one or the other.

Consider this case:

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

f(condition ? 5 : "Hello");

Which overload is going to be called? This is a simple case, and there are more complicated ones involving e.g. templates, which have to be known at compile time. So in the above case, the compiler won't choose an overload based on the condition, it has to pick one overload to always call.

It can't do that, so the result of a ternary operator always has to be the same type (or compatible).

The ternary operator returns the value of the branch it takes. If the two branches didn't both have the same type, the expression would have an indeterminate type.

The point is that an expression should have a statically defined type.

If branches of your ternary operator are incompatible, you cannot statically deduce the ternary expression type.

I guess because the ternary operator must have a defined return value. Hard to do if the types of both branches is different, or void.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!