我正在上 C++ 课程,我注意到只有几个数学运算符可供使用。我还注意到 C++ 的数学库中没有指数运算符。
为什么必须为此编写一个函数?C++ 的制造商是否有理由省略此运算符?
我正在上 C++ 课程,我注意到只有几个数学运算符可供使用。我还注意到 C++ 的数学库中没有指数运算符。
为什么必须为此编写一个函数?C++ 的制造商是否有理由省略此运算符?
你不会为此编写函数(当然,除非你疯了)。标题中定义了一个非常好的pow
函数。<cmath>
顺便说一句:如果您尝试
^
像某些人习惯的那样用作电力操作员,那么您将大吃一惊。它是异或 (XOR) 运算符(参见此处)。
根据 Bjarne Stroustrup 在他的著作The design and evolution of C++中的说法。他们决定避免使用指数运算符,因为:
在发明 C 时,大多数 C 操作很容易映射 到单个处理器指令。当时,求幂不是机器指令,因此是库例程。
Python 有**
求幂运算符。在 C++ 中,您实际上可以通过一些技巧来定义这样的运算符。通过将一元运算*
符与二元*
运算符组合,如下所示:
#include <cmath>
#include <iostream>
struct Num {
double value;
Num(double value) : value(value) { }
typedef Num* HalfStar;
HalfStar operator*() const { return HalfStar(this); }
Num operator*(const HalfStar& rhs) const
{
return Num(std::pow(value, rhs->value));
}
Num operator*(const Num& rhs) const
{
return Num(value * rhs.value);
}
friend std::ostream& operator<<(std::ostream& os, const Num& n)
{
return os << n.value;
}
};
int main(int argc, char**argv)
{
Num a = 10;
Num b = 9;
std::cout << "a*b = " << (a*b) << "\n";
std::cout << "a**b = " << (a**b) << "\n";
return 0;
}
但是,这不适用于非类类型,因此您不能这样做:x**2
.
请参阅此处 以获取实时示例。