c++ - 为什么不能重载三元运算符?

标签 c++ visual-c++ operator-overloading operators ternary-operator

为什么不能重载三元运算符'?:'?

我经常使用三元运算符来合并 if 语句,并且很好奇为什么语言设计者选择禁止该运算符被重载。我在 C++ Operator Overloading 中寻找原因的解释。但没有找到描述为什么这是不可能的。脚注提供的唯一信息是它不能被重载。

我最初的猜测是,重载运算符几乎总是会违反上面链接中给出的第一或第二个原则。重载的含义很少会很明显或清楚,或者会偏离其原始已知语义。

所以我的问题更多是为什么这是不可能的,而不是如何做到,因为我知道这是不可能的。

最佳答案

如果您可以覆盖三元运算符,则必须编写如下内容:

xxx operator ?: ( bool condition, xxx trueVal, xxx falseVal );

要调用您的覆盖,编译器必须计算 trueValfalseVal 的值。这不是内置三元运算符的工作方式 - 它只计算其中一个值,这就是为什么您可以编写如下内容:

return p == NULL ? 23 : p->value;

不用担心通过 NULL 指针进行间接寻址。

关于c++ - 为什么不能重载三元运算符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17953437/

相关文章:

c++ - 图像差异 : How to find minor differences between images?

c++ - C++ 表达式中的运算符优先级

c++ - 在编译时拆分字符串会在不同的编译器上产生不同的结果

c# - 为 null 重载 == 运算符

c++ - 奇怪的程序崩溃

c++ - 递归回溯

c++ - 如何使用 QT 和 C++ 监听 mysql 数据库中的触发事件?

c++ - do while 循环/c++ 中的 bool 表达式

c++ - 在 Windows 上用 clang 编译 c++11 程序时出错

c++ - 从友元函数返回局部变量的引用