verdadera segun rusia resumen murio mundial marruecos libro jesus jesucristo historia goles españa crucifixión como biblia c++

segun - La respuesta no está clara c++



la verdadera historia de jesucristo libro (2)

Quien haya escrito la respuesta original a la prueba está equivocado.

  • Este ejemplo proviene (exactamente) del propio estándar de C ++ , sección § 11/7, [class.access], y ha sido copiado por el que escribió la "prueba"

El ejemplo va más allá en el estándar, con plantillas (las omitiré aquí):

class A { typedef int I; // private member I f(); friend I g(I); static I x; }; A::I A::f() { return 0; } A::I g(A::I p = A::x); A::I g(A::I p) { return 0; } A::I A::x = 0;

  • Citando el estándar para la explicación:

Aquí, todos los usos de A::I están bien formados porque A::f y A::x son miembros de la clase A yg es un amigo de la clase A. Esto implica, por ejemplo, que la verificación de acceso en la primera el uso de A::I debe aplazarse hasta que se determine que este uso de A::I es como el tipo de retorno de un miembro de la clase A.]

Aquí hay una pregunta de prueba:

Considere el siguiente código:

class A { typedef int I; // private member I f(); friend I g(I); static I x; };

¿Cuáles de los siguientes son válidos?

a. A::I A::f() { return 0; } b. A::I g(A::I p = A::x); c. A::I g(A::I p) { return 0; } d. A::I A::x = 0;

La respuesta a esta pregunta se considera correcta solo la primera versión (a.), Pero ¿por qué? Todos ellos son válidos en mi opinión. Incluso probaron todos los que compilan con éxito. ¿Por qué solo la primera respuesta es correcta?


Todos ellos son válidos en C ++.

Aquí está el código exacto, es un ejemplo del propio estándar:

http://www.open-std.org/jtc1/sc22/open/n2356/access.html

Así es como los analizo:

a. A::I A::f() { return 0; } // defines A::f() which was previously prototyped b. A::I g(A::I p = A::x); // declares prototype g(A::I), but doesn''t define it c. A::I g(A::I p) { return 0; } // defines g(A::I) d. A::I A::x = 0; // defines static storage for A::x which was previously declared in A

Todos estos se compilan, tanto individualmente como colectivamente.