Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

People also ask

Does C have a power operator?

In the C Programming Language, the pow function returns x raised to the power of y.

Does C++ have an operator for exponents?

C++ does not include an exponent operator. Note that the parameters (and return value) of function pow() are of type double.

Does the C language has a power exponentiation operator like Python?

But in C, there is no built-in exponentiation operator, and the ^ operator is used for bitwise exclusive or (i.e., bitwise XOR). In C, the pow library function (with its siblings powf and powl) performs exponentiation.


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.


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!


Because that's the exclusive or bitwise operator.

There are functions called "pow" that do what you want though.