Why doesn't C++ have a power operator?

user2015064 picture user2015064 · Jan 31, 2013 · Viewed 34.9k times · Source

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 ^.

Answer

James Kanze picture James Kanze · Jan 31, 2013

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.