为什么C++没有电源操作员?

Why doesn't C++ have a power operator?

本文关键字:操作员 电源 C++ 为什么      更新时间:2023-10-16

许多语言都有幂运算符;为什么不C++?例如,Fortran和Python使用**并且通常使用^编写(例如LaTeX)。

C++确实有一个幂运算符——它写pow(x, y)

最初,C 语言在设计时考虑了系统软件,并且对电力运营商的需求不大。 (但它有按位运算符,如 &| ,在很多情况下都没有其他语言。有一些关于添加一个的讨论在C++标准化期间,但最终的共识更多或更少:

  • 它不能^,因为优先级是错误的(并且当然,有2. ^ 8 == 256.,但2 ^ 8 == 10不是很令人愉快)。

  • 它不能**,因为这会破坏现有的程序(可能具有类似 x**p 的内容,x intp int*)。

  • 可能是*^,因为这个序列目前不合法在 C 或 C++ 中。 但这仍然需要引入其他优先级。

  • C 和 C++ 已经有足够的特殊令牌和级别优先,并在与数字社区讨论后,得出的结论是,真的没有任何问题 pow(x, y) .

所以C++让事情保持原样,这似乎没有造成任何问题。

有两个原因

  1. 符号^保留用于按位异或运算

  2. 您可以使用std::pow来实现相同的功能。

C++的好处是,您可以超载operator来做任何您喜欢做的事情!

template< typename T >
T operator^( T x, T y ) {
    return std::pow( x, y );
}

但是要考虑到,当你这样做时,其他知道C++和不认识你的人(我相信其中有很多)可能会在理解你的代码时遇到重大问题!

因为这是独占运算符或按位运算符。

不过,有一些称为"pow"的函数可以做你想做的事。

如果你愿意,你可以帮助自己

struct DoubleMock
{
    DoubleMock(double v){_v = v;}
    double _v;
};
double operator^(DoubleMock x, DoubleMock y)
{
    return pow(x._v,y._v);
}
double v = DoubleMock(2.0) ^ 2.0;