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, tener2. ^ 8 == 256.
, pero2 ^ 8 == 10
tampoco es muy agradable).No podría ser
**
, porque eso rompería los programas existentes (que podrían tener algo comox**p
, conx
anint
, yp
anint*
).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
El símbolo
^
está reservado para la operation xor bit a bitPuede 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.