2017-03-07 21 views
3

为什么在C++中重载运算符时不能更改运算符优先级?例如,如果您有一个在乘法之前进行加法的类,那么如何使加法运算符具有比乘法运算符更高的优先级?运算符优先级在C++中重载

这是从这个问题Operator overloading and precedence 不同,因为我问为什么,以及如何解决此限制。

我宁愿避免编译器定制,只使用C++ 14标准。第三方库是可以的。

+0

*“为什么在C++中重载运算符时不能更改运算符优先级?”*标准说明如此。 *“如何解决这个限制”*你不能。 –

+0

我怀疑有一个可行的解决方法。 –

+3

主要是因为传统的编译器设计首先解析代码的语法和语法。只有在解析后,C++编译器才会试图找出每个运算符来自哪里,内置或重载的位置。那时,马已经离开了谷仓。 –

回答

3

传统的编译器设计首先解析语法,然后找出每个操作符来自哪里。

编译器设计工具如YACC早在C++之前就已存在。因此,传统编译器遵循先解析源代码语法的一般原则逐步演变,然后试图弄清楚如何处理每个运算符。因此,编译器首先看到语言的结构,最重要的是;而C++标准实际上希望能够编写一个C++编译器,而不必重新发明已经发明的每一个轮子。

+0

C++已经很难解析了,不知道给定的符号是类型还是实际的对象,具体取决于上下文...... –

+0

好的。我知道了。感谢您的回应。 –