2012-08-01 15 views
19
#include <iostream> 
int main() 
{ 
    ------- some statements --------- 

    int(a)(1); 

    -------- some other statments ....... 
    return 0; 
} 

Vi esta afirmación en un programa en C++. Esto no dio como resultado un error de sintaxis.¿Qué es int (a) (1)? ¿Es esto una sintaxis C++ válida?

¿Qué es a aquí? ¿Es esta sintaxis C++ válida?

+4

Ahora la pregunta es: ¿Quién en el mundo que escribió? – Mysticial

+5

Quizás la barra espaciadora estaba rota. –

+0

podría ser el resultado de una macro expansión o alguna otra forma de generación de código –

Respuesta

28

Está bien para poner el nombre de la variable entre paréntesis:

int i; 
int (i); // exact same 

Así, en su caso:

int a(1); // initialized with 1 
int (a)(1); // exact same 
+7

Ahora para una pregunta de bonificación, ¿por qué? –

+7

@Martin: los tipos son compostables en cierta medida, y el conjunto adicional de paréntesis permite la agrupación de subexpresiones. El lenguaje podría haber prohibido el uso de paréntesis donde no se requiere estrictamente, pero no lo hicieron. Por ejemplo, 'int (X)()' declara 'X' como una * función * sin argumentos y devolviendo' int', ahora, si 'X' es' * Y' entonces es un puntero a [.. .], si 'Y' es' Z [10] 'será una matriz de 10 punteros a las funciones ... Se requieren paréntesis para agrupar en muchos casos, entonces ¿por qué prohibirlos en otros? ... teniendo en cuenta que están permitidos en cualquier otro lugar donde el grupo de paréntesis. –

+1

@MartinBeckett: Y para agregar a un lenguaje más por qué en lugar de un 'moral' por qué, §8/4 explícitamente lo permite en la gramática. Y §6.8 elimina la ambigüedad con expresiones-declaraciones ('T (e) [5]' podría significar declarar 'e' con el tipo' T [5] ', o moldear' e' a 'T' y al índice de subíndices 5; en estos casos ambiguos, una declaración es siempre el resultado). – GManNickG

Cuestiones relacionadas