No.
Bueno, algo sí, en el sentido de que existen personas que se consideran new
en new int
ser un operador. Sin embargo, esta opinión está (en su mayoría) en desacuerdo con el estándar.
En primer lugar, [lex.operators/1]
enumera los operadores en el idioma. No se deje engañar pensando que estos son simplemente "operadores de preprocesamiento"; no existe tal distinción en el sentido de operadores léxicos . Tampoco tendría sentido, ya que no puede (por ejemplo) ++
una macro.
new
es, de hecho, una palabra clave (por [lex.key/1]
).
A continuación, veamos la nueva expresión en sí. Aquí es donde las cosas se ponen un poco más confusas. Hay, por ejemplo, la siguiente redacción en [expr.new/4]
:
En cambio, la versión explícitamente entre paréntesis del nuevo operador se puede utilizar para crear objetos de tipos compuestos.
Considero que esto es un error editorial, ya que está en desacuerdo con las definiciones proporcionadas anteriormente y no ocurre en ningún otro lugar de esa sección.
Luego llegamos a la sobrecarga del operador . En su producción gramatical para una declaración de operador, el terminal que enumera cosas (incluido new
) se denomina operador ( [over.oper.general/1]
). No creo que debamos preocuparnos por esto. Los nombres de terminales en la gramática nunca han tenido la intención de introducir definiciones de términos. Después de todo, tiene una expresión and que _no necesita ser una operación AND bit a bit; puede ser simplemente una expresión de igualdad :
expresión-y :
expresión
- &
igualdad y expresión expresión-igualdad
Es común definir gramáticas como esta, y ciertamente no significa que cada expresión de igualdad deba considerarse de alguna manera una invocación del operador AND bit a bit.
Finalmente, algunos han afirmado que la siguiente redacción (también en la sección de sobrecarga del operador) es una prueba de que de new
alguna manera ahora, de forma aislada, mágicamente es un operador:
Los operadores new[]
, delete[]
, ()
, y []
se forman a partir de más de una ficha
A ellos les digo, no sólo no está new
ni siquiera en la lista, sino que está claramente usando el término "operador" en el sentido más amplio de "cosas que se pueden sobrecargar", aunque new
en sí mismo todavía no es un operador . También está en una nota no normativa, que debería decirle todo lo que necesita saber.
Y, como usted mismo señala, ya lo consideramos operator new
otra cosa.
new
es comosizeof
aquí. Y creo que la mayoría de la comunidad de C ++ piensasizeof
en un operador. El stansard incluso se refiere al "sizeof
operador" cuando describe sus efectos.