许多语言都有权力运营商;为什么不是C ++?例如,Fortran和Python使用**
并且通常使用^
编写(例如,在LaTeX中)。
答案 0 :(得分:45)
C ++确实有一个幂运算符 - 它写成pow(x, y)
。
最初,C的设计考虑了系统软件,并且
对电力运营商的需求不大。 (但它有
按位运算符,如&
和|
,它们很多都不存在
其他语言。)有一些关于添加一个的讨论
在C ++标准化过程中,最终的共识更多
或更少:
它不能是^
,因为优先级是错误的(并且是
当然,有2. ^ 8 == 256.
,但2 ^ 8 == 10
不是很好
愉快的。)
它不能是**
,因为这会破坏现有的
程序(可能包含x**p
,x
和int
p
,int*
和*^
)。
可能是pow(x, y)
,因为此序列目前不合法
在C或C ++中。但这仍然需要引入一个
额外的优先级。
C和C ++已经有足够的特殊令牌和等级 优先,并在与数字社区讨论后, 结论是,确实没有任何问题 {{1}}。
所以C ++留下了原样,而这似乎没有 造成任何问题。
答案 1 :(得分:9)
有两个原因
符号^
保留用于按位xor operation
您可以使用std::pow
来实现相同的功能。
关于C ++的好处是你可以重载operator
来做任何你喜欢的事情!
template< typename T >
T operator^( T x, T y ) {
return std::pow( x, y );
}
然而考虑到,当您这样做时,其他知道C++
并且不认识您的人(我相信其中有很多人)可能会<了解您的代码时遇到的问题很严重
答案 2 :(得分:1)
因为那是独占或按位运算符。
有一些叫做“战俘”的功能可以做你想做的事。
答案 3 :(得分:1)
如果你想要你可以帮助自己
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;