为什么C++不允许用户定义的运算符?

Fel*_*bek 4 c++ parsing operators

我一直想知道这件事已经有一段时间了.已经有很多它们可以超载,那么为什么不到最后并允许自定义运营商呢?我认为这可能是一个很好的补充.

我被告知这会使语言难以编译.这让我想知道,C++无法真正设计为易于编译,所以它真的可以撤销吗?当然,如果你使用带有静态表和语法的LR解析器,例如

E ? T + E | T
T ? F * T | F
F ? id | '(' E ')'
Run Code Online (Sandbox Code Playgroud)

它不会起作用.在Prolog中,通常使用运算符优先级解析器AFAIK进行解析,可以轻松定义新的运算符,但语言更简单.现在,语法显然可以被重写为接受identifiers在操作符被硬编码到语法中的每个地方.

还有哪些其他解决方案和解析器方案以及其他哪些因素影响了设计决策?

mvl*_*dic 10

http://www2.research.att.com/~bs/bs_faq2.html#overload-operator

这种可能性已被多次考虑过,但每次我/我们都认为可能出现的问题超过了可能带来的好处.

这不是语言技术问题.即使我在1983年首次考虑它,我也知道它是如何实现的.然而,我的经验是,当我们超越最微不足道的例子时,人们似乎对运营商使用的"明显"含义有着微妙的不同看法.一个经典的例子是a**b**c.假设**已经表示取幂.现在应该a**b**c(a**b)**ca**(b**c)?我认为答案很明显,我的朋友们同意了 - 然后我们发现我们不同意哪个决议是明显的.我的猜想是,这些问题会导致细微的错误.

  • 添加了相关报价.一般来说,简单地将链接作为答案发布是不受欢迎的.这使得读者难以获得概述(如果有5个不同的答案,并且每个答案都包含链接而没有其他内容,那么找出哪些答案是好的哪些答案是好的哪些是坏的,或者只是无关紧要),但也因为你链接到的页面将来可能会被删除,或者它上面的文字可能会改变.简而言之,如果你想让人们回答你的答案,那么*你必须贡献一些东西.即使它只是您链接到的页面的直接引用 (5认同)