2010-06-02 13 views
5

Alguien me preguntó recientemente la diferencia entre un operador estándar de C++ (por ejemplo, nuevo, eliminar, tamaño) y función (por ejemplo, bronceado, libre, malloc). Por "estándar" me refiero a los proporcionados por defecto por el conjunto de compiladores, y no definidos por el usuario. A continuación se encuentran las respuestas que di, aunque ninguna parecía satisfactoria.Operadores vs Funciones en C/C++

(1) Un operador no necesita ningún encabezado para ser incluido para usarlo: P. ej. puede llamar a lo nuevo sin incluir encabezados. Sin embargo, una función (digamos libre()) necesita encabezados incluidos, obligatoriamente.

(2) Un operador se define como tal (es decir, como un operador de clase) en algún lugar de los encabezados estándar. Una función no es.

¿Puede criticar estas respuestas y darme una mejor idea de la diferencia?

+0

¿Se usa "borrar" en ambos conjuntos intencionalmente? – Sev

+0

Consulte http://stackoverflow.com/questions/184537/in-what-cases-do-i-use-malloc-vs-new – nico

+0

No, corregido ahora – PKG

Respuesta

11

Los operadores son palabras clave con una sintaxis fija. Aquellos que pueden estar sobrecargados pueden variar un poco en sintaxis, pero eso está dentro de los límites. El operador new aún se escribe new, incluso cuando está sobrecargado y la sintaxis de invocación es siempre la misma.

nombres de función son identificadores, que pueden ser casi arbitraria. No hay ninguna razón sintáctica no se podía acabar con malloc() y utilizar

bool my_fancy_alloc(void*& memory, unsigned char size, bool zero_it); 

lugar. (Marca: Hay son otras razones, al igual que la cordura de sus compañeros de trabajo.)

+1

+1. Supongo que la pregunta es incorrecta al principio (¿operadores frente a funciones?), Pero su respuesta que resalta las palabras clave y los identificadores lo resuelve todo. – paercebal

4

(1) no es estrictamente cierto. typeid es un operador, pero su uso requiere que incluya <typeinfo>.

Mi respuesta sería simplemente que los operadores se definen como tales. :: no necesariamente tiene que ser considerado un operador, por ejemplo, pero el estándar dice que sí, y así es.

Si está buscando una respuesta más detallada, me gustaría mencionar que los operadores no suelen tener funciones similares a . Y aquellos que sí lo hacen [sizeof y typeid] no actúan como funciones; sus operandos no son evaluados en tiempo de ejecución.

+0

Gracias. Pero, ¿qué ocurre con los operadores C puros (como +)? No pueden ser operadores de clase, pero son operadores porque el estándar C lo dice. – PKG

+0

@user: no entiendo lo que estás preguntando. 'operator +' puede estar sobrecargado para las clases. –

2

Los operadores tienen una sintaxis especial, p. puede usar new (o +) sin poner argumentos entre paréntesis después del nombre del operador.

0

a mi entender nombre de función es una representación del operador goto, después de saltar a una aplicación de ubicación de código específico puede realizar de uno a muchos unidad de trabajo; por otro lado, un operador realiza una unidad real de trabajo.

0

Un operador y función son conceptualmente iguales. Ambos toman algunos valores como entrada y devuelven algunos como salida. Lo único que diferencia es la sintaxis.