2012-04-19 14 views
6

Los nombres de los argumentos de la función en las declaraciones (que probablemente residen en el archivo de encabezado) son aparentemente ignorados por completo por el compilador. ¿Cuáles son las razones para permitir que se compile lo siguiente utilizando cualquiera de las versiones de declaración 1 o 2?¿Por qué los nombres de argumento de función no son importantes en las declaraciones de C++?


aplicación

void A::doStuff(int numElements, float* data) 
{ 
    //stuff 
} 

declaración - Versión 1

class A 
{ 
public: 
    void doStuff(int numElements, float* data); 
} 

declaración - Versión 2

class A 
{ 
public: 
    void doStuff(int, float*); 
} 
+1

No tiene que ver con el encabezado, la diferencia es que es una declaración. –

+0

Buen punto. Pregunta editada. Gracias – learnvst

Respuesta

11

El compilador solo necesita saber qué tipo de argumentos requiere el método. No es importante para el compilador cómo los llama.

El compilador necesita conocer los tipos de argumentos por varias razones:

  • decidir el método a utilizar si hay varios métodos con el mismo nombre de método
  • decidir si los parámetros de entrada son válidos
  • Decida si los parámetros necesitan ser reemplazados
  • Decidir cómo generar el CÓDIGO para llamar al método y manejar la respuesta

Sin embargo, sugiero usar la primera versión del encabezado. Ayuda a otros desarrolladores (y a usted mismo) a usar las funciones y saber qué parámetros tienen qué significado.

1

La única razón que puedo pensar que la versión 1 es mejor es la legibilidad. Se ignoran ya que no importan para el compilador.

5

Porque los nombres no afectan nada al compilador fuera de la función.

6

Los nombres de los parámetros no son parte de la firma de la función. A menos que los use, no necesita para tener nombres ni siquiera en la implementación de la función.

1

.. porque cuando los encabezados están incluidos en otros módulos solo necesita los tipos para generar el código correcto. Los nombres suelen ser útiles y convenientes, pero no absolutamente necesarios.

Cuestiones relacionadas