Why doesn't C++ have a power operator? [closed]

邮差的信 提交于 2019-12-04 15:26:01

问题


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, having 2. ^ 8 == 256., but 2 ^ 8 == 10 isn't very pleasant either).

  • It couldn't be **, because that would break existing programs (which might have something like x**p, with x an int, and p an int*).

  • 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

  1. The symbol ^ is reserved for bit-wise xor operation

  2. You 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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!