【发布时间】:2014-12-12 00:16:27
【问题描述】:
考虑一下这个 C++ 代码:
struct A {
A operator*(A a) { return A(); } // A*A -> A
};
struct B {
A operator*(B b) { return A(); } // B*B -> A
};
int main() {
A t2 = B()*B() * A(); // works
A t1 = A() * B()*B(); // errors
return 0;
}
A*B 是不允许的,但B*B 是。是否存在根据变量类型选择运算符优先级规则的语言?
【问题讨论】:
-
我当然希望不会——我很同情那些调试解析器的人。
-
@larsmans:我认为这句话起源于一个匿名的 c++ 编译器作者会议。
-
@phimuemue 但是类型会改变 ALGOL 中的优先级吗?否则,就像 Prolog 一样,您可以设置优先级但以后不能更改。
-
存在可以使用括号来确定操作顺序的程序员。
标签: c++ operator-overloading operator-precedence