【发布时间】:2017-06-24 00:46:57
【问题描述】:
在数值编程中,我经常想在表达式中将数字提升为幂。这导致代码出现数百次 pow(x,2) 或类似的东西。
这会使代码变得混乱,使其可读性和解析性降低,尤其是在将书面方程式与代码进行比较时。
如果可能的话,我想用 C++ 编写一个求幂运算符。
a^b == pow(a, b)
我尝试为operator()(double, double) 或operator[](double, double) 编写重载(之所以选择它是因为它比(二进制)* 绑定得更紧密。但是我无法让它工作。
这样的事情有可能吗?
也许是预处理器的诡计?
【问题讨论】:
-
我建议您删除所有关于这样做的相对重要性的价值判断,因为它只会引起您的注意,实际上并没有帮助,而且它无助于理解您的问题。跨度>
-
不应为内置类型重载运算符,但您可以编写包装类并重载
operator^或任何您想要的。在我看来,这是不必要的,而且会引起混淆,因为人们习惯于operator^是 XOR。 -
这是做不到的,因为你不能重载只涉及原始类型的运算符,并且没有可以由预处理器重新定义的标记(你不能将宏命名为数字或
^)。 -
@xaxxon 我认为确实如此。我试图解释我“打破规则”的动机,可以这么说,以免有人来提供相当于“你不应该这样做”的建议。
-
我不明白所有的反对意见。这个问题是合理和有用的。经证明,也很好回答。