许多语言都有幂运算符;为什么没有 C++?例如,Fortran 和 Python 使用**
并且通常使用^
.
user2015064
问问题
38340 次
4 回答
55
C++ 确实有一个幂运算符——它被写成pow(x, y)
.
最初,C 的设计考虑了系统软件,并没有太多需要强大的操作符。(但它有按位运算符,例如&
and |
,这在许多其他语言中是不存在的。)在 C++ 标准化期间有一些关于添加一个的讨论,但最终的共识或多或少是:
不可能
^
,因为优先级是错误的(当然,有2. ^ 8 == 256.
,但2 ^ 8 == 10
也不是很愉快)。不可能
**
,因为那会破坏现有程序(可能有类似x**p
,和x
an 的东西)。int
p
int*
可能是
*^
,因为这个序列目前在 C 或 C++ 中是不合法的。但这仍然需要引入额外的优先级。C 和 C++ 已经有了足够多的特殊标记和优先级,在与数字社区讨论后,得出的结论是
pow(x, y)
.
所以 C++ 保持原样,这似乎没有造成任何问题。
于 2013-01-31T13:58:00.497 回答
10
有两个原因
该符号
^
保留用于按位异或运算您可以使用
std::pow
来实现相同的功能。
C++ 的好处是你可以重载operator
来做你喜欢做的任何事情!
template< typename T >
T operator^( T x, T y ) {
return std::pow( x, y );
}
但是请注意,当您这样做时,其他认识C++
和不认识您的人(我相信其中有不少)可能在理解您的代码时遇到重大问题!
于 2013-01-31T13:32:56.073 回答
1
因为那是排他或按位运算符。
有一些名为“pow”的函数可以做你想做的事。
于 2013-01-31T13:32:21.703 回答
0
如果你愿意,你可以帮助自己
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;
于 2013-01-31T13:56:20.940 回答