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.