type studio quimica programacion operadores operador not name momento lineal does dev cuanticos c++ operator-keyword

c++ - studio - operador p quimica



¿Por qué C++ no tiene un operador de energía? (4)

Muchos idiomas tienen un operador de energía; ¿Por qué no C ++? Por ejemplo, Fortran y Python usan ** y se escriben comúnmente (en LaTeX, por ejemplo) usando ^ .


C ++ tiene un operador de energía: está escrito en pow(x, y) .

Originalmente, C se diseñó pensando en el software del sistema, y ​​no había mucha necesidad de un operador eléctrico. (Pero tiene operadores bitwise, como & y | , que están ausentes en muchos otros idiomas). Hubo cierta discusión sobre la adición de uno durante la estandarización de C ++, pero el consenso final fue más o menos:

  • No podía ser ^ , porque la prioridad era incorrecta (y, por supuesto, tener 2. ^ 8 == 256. , pero 2 ^ 8 == 10 tampoco es muy agradable).

  • No podría ser ** , porque eso rompería los programas existentes (que podrían tener algo como x**p , con x an int , y p an int* ).

  • Podría ser *^ , porque esta secuencia no es actualmente legal en C o C ++. Pero esto aún requeriría la introducción de un nivel adicional de precedencia.

  • C y C ++ ya tenían suficientes tokens especiales y niveles de precedencia, y después de las discusiones con la comunidad numérica, se llegó a la conclusión de que realmente no había nada malo con pow(x, y) .

Así que C ++ dejó las cosas como estaban, y esto no parece haber causado ningún problema.


Podrías ayudarte si quieres.

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;


Por dos razones

  1. El símbolo ^ está reservado para la operation xor bit a bit

  2. Puede usar std::pow para lograr la misma funcionalidad.

¡Lo bueno de C ++ es que puede sobrecargar al operator para hacer lo que quiera!

template< typename T > T operator^( T x, T y ) { return std::pow( x, y ); }

Sin embargo, tenga en cuenta que cuando haga eso, otras personas que conozcan C++ y no lo conozcan (y creo que hay algunas de ellas) pueden tener problemas importantes para entender su código.


Porque ese es el operador exclusivo o bitwise.

Hay funciones llamadas "pow" que hacen lo que quieres sin embargo.