¿Por qué Foo (b) compilar con éxito en C ++?

Sarvesh:

Hay un comportamiento extraño cuando compilo el siguiente código:

class Foo {
};
int main() {
    Foo(b);
}

Se compila correctamente incluso sin declaración de b. Cualquier explicación para esto?

songyuanyao:

Es una declaración misma. Se declara una variable llamada bcon el tipo Foo, es decir, el mismo efecto que Foo b;.

[Stmt.ambig] / 1

Existe una ambigüedad en la gramática que implica la expresión de los estados- s y la declaración de s : Una expresión comunicado con una conversión explícita al estilo de la función como su subexpresión más a la izquierda puede ser indistinguible de una declaración donde el primer declarador comienza con una (. En esos casos, la declaración es una declaración .

y [stmt.ambig] / 2

Los casos restantes son de declaración s . [Ejemplo:

class T {
  // ...
public:
  T();
  T(int);
  T(int, int);
};
T(a);               //  declaration

...

Supongo que te gusta

Origin http://10.200.1.11:23101/article/api/json?id=377261&siteId=1
Recomendado
Clasificación