【问题标题】:Operator Precedence Overloading in C++C++ 中的运算符优先级重载
【发布时间】:2017-07-27 21:46:04
【问题描述】:

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

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

我宁愿避免编译器定制,只使用 C++14 标准。第三方库没问题。

【问题讨论】:

  • “为什么在 C++ 中重载运算符时不能更改运算符优先级?” 标准是这样说的。 “如何解决这个限制”你不能。
  • 我怀疑是否有可行的解决方法。
  • 多半是因为传统的编译器设计先解析语法和代码的句法。只有在它被解析之后,C++ 编译器才会尝试找出每个运算符的来源、内置或重载。到那时,马已经离开了谷仓。
  • 使用常规成员函数来强制执行订单。
  • 但是标准为什么要这样规定呢?

标签: c++ class operator-overloading c++14


【解决方案1】:

传统的编译器设计首先解析语法,然后再找出每个运算符的来源。

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

【讨论】:

  • C++ 已经很难解析了,根据上下文不知道给定符号是类型还是实际对象...
  • 好的。我知道了。感谢您的回复。
猜你喜欢
  • 1970-01-01
  • 2012-10-08
  • 2013-02-24
  • 2017-06-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-09
相关资源
最近更新 更多