usar pueden poner permite los historias hashtags funcionan cuantos crear como comentarios c++ c function declaration signature

c++ - pueden - los hashtags en los comentarios funcionan



¿Cuál es la diferencia entre declaración de función y firma? (5)

El estándar define dos términos: declaración y definición. Una definición es una declaración tentativa. Sin embargo, los estándares C99 y C ++ 03 tienen definiciones ligeramente diferentes.

Del borrador de C ++ 0x:

Apéndice C

8.3.5 Cambio: en C ++, una función declarada con una lista de parámetros vacía no contiene argumentos. En C, una lista de parámetros vacía significa que el número y el tipo de los argumentos de la función son desconocidos "

Definiciones

1.3.11 firma

el nombre y la lista de tipos de parámetros (8.3.5) de una función, así como la clase, concepto, mapa conceptual o espacio de nombres de los que es miembro. Si una función o plantilla de función es un miembro de la clase, su firma incluye adicionalmente los calificadores cv (si los hay) y el calificador ref (si corresponde) en la plantilla de la función o función misma. La firma de un miembro restringido (9.2) incluye sus requisitos de plantilla. La firma de una plantilla de función incluye además su tipo de devolución, su lista de parámetros de plantilla y sus requisitos de plantilla (si los hay). La firma de una especialización de plantilla de función incluye la firma de la plantilla de la que es una especialización y sus argumentos de plantilla (ya sea explícitamente especificado o deducido). [Nota: las firmas se utilizan como base para la manipulación y vinculación de nombres.-nota final]

En C o C ++, ¿cuál es la diferencia entre declaración de función y firma de función?

Sé algo de la declaración de funciones pero la firma de funciones es totalmente nueva para mí. ¿Cuál es el punto de tener el concepto de firma de función? ¿Para qué se usan los dos conceptos?

¡Gracias!


La firma de la función no incluye el tipo de devolución o el tipo de enlace de la función.

OK, Wikipedia no está de acuerdo conmigo sobre el tipo de devolución que se incluye. Sin embargo, sé que el compilador no utiliza el tipo de retorno al decidir si una llamada de función coincide con la firma. Esta pregunta anterior de parece estar de acuerdo: ¿el tipo de devolución es parte de la firma de la función?


También tenga en cuenta que la constante de nivel superior y la volatilidad en el argumento no son parte de la firma, de acuerdo con el estándar. Pero algunos compiladores se equivocan.

p.ej

void f(const int, const char* const);

tiene la misma firma que

void f(int, const char*);


Una declaración de función es el prototipo de una función (o puede provenir de la definición de la función si el compilador no ha visto ningún prototipo en ese punto): incluye el tipo de retorno, el nombre de la función y los tipos de parámetros ( opcionalmente en C).

Una firma de función es las partes de la declaración de función que el compilador usa para realizar una resolución de sobrecarga. Como varias funciones pueden tener el mismo nombre (es decir, están sobrecargadas), el compilador necesita una forma de determinar a cuál de las varias funciones posibles con un nombre en particular debe resolverse una llamada de función. La firma es lo que el compilador considera en esa resolución de sobrecarga. Específicamente, el estándar define ''firma'' como:

la información sobre una función que participa en la resolución de sobrecarga: los tipos de sus parámetros y, si la función es un miembro de la clase, los calificadores cv (si los hay) en la función en sí misma y la clase en la que se declara la función miembro.

Tenga en cuenta que el tipo de retorno no es parte de la firma de la función. Como dice el estándar en una nota al pie, "Las firmas de funciones no incluyen el tipo de retorno, porque eso no participa en la resolución de sobrecarga".


Una declaración de función es un prototipo. Una firma de función indica cuál es el tipo de retorno y los parámetros utilizados que conforman la firma. Considera esto:

int foo(int, int); /* Function Declaration */ /* Implementation of foo ** Function signature */ int foo(int a, int b){ }

Ahora, considere este escenario: se le pregunta a un programador cuál es la firma de la función para foo :

  • Devuelve un tipo de datos de int
  • Dos parámetros son también de tipo de datos de int , llamados a y b respectivamente

El prototipo de función, por otro lado, es identificar en el compilador C / C ++, qué esperar y si la firma no coincide con el prototipo, el compilador emitirá un error, en el contexto del "error de declaración de función" o ''prototipo no coincide''.

Espero que esto ayude, Saludos cordiales, Tom.