问题
Many languages have a power operator; why doesn't C++? For example, Fortran and Python use **
and is commonly written (in LaTeX, for example) using ^
.
回答1:
C++ does have a power operator—it's written pow(x, y)
.
Originally, C was designed with system software in mind, and
there wasn't much need for a power operator. (But it has
bitwise operators, like &
and |
, which are absent in a lot
of other languages.) There was some discussion of adding one
during standardization of C++, but the final consensus was more
or less:
It couldn't be
^
, because the priority was wrong (and of course, having2. ^ 8 == 256.
, but2 ^ 8 == 10
isn't very pleasant either).It couldn't be
**
, because that would break existing programs (which might have something likex**p
, withx
anint
, andp
anint*
).It could be
*^
, because this sequence isn't currently legal in C or C++. But this would still require introducing an additional level of precedence.C and C++ already had enough special tokens and levels of precedence, and after discussions with the numerics community, it was concluded that there really wasn't anything wrong with
pow(x, y)
.
So C++ left things as they were, and this doesn't seem to have caused any problems.
回答2:
For two reasons
The symbol
^
is reserved for bit-wise xor operationYou may use
std::pow
to achieve the same functionality.
The nice thing about C++ is that you can overload the operator
to do whatever you like it to do!
template< typename T >
T operator^( T x, T y ) {
return std::pow( x, y );
}
However take into account that when you do that, other people who know C++
and don't know you (and I believe there are quite a few of those) might have significant problems understanding your code!
回答3:
You could help yourself if you want
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;
回答4:
Because that's the exclusive or bitwise operator.
There are functions called "pow" that do what you want though.
来源:https://stackoverflow.com/questions/14626960/why-doesnt-c-have-a-power-operator