4.1.2 Declaraciones y definiciones: detalles y ejemplos
En realidad, el Estándar C++ establece que una declaración
es una definición a menos que:
- declare una función sin declarar el cuerpo de la misma.
- contenga el especificador extern (
4.1.8d)
- contenga un especificador de tipo de enlazado.
- declare una propiedad estática dentro del cuerpo de una clase
(
4.11.7).
- sea la declaración de un nombre de clase
- sea la declaración de un typedef (
3.2.1a)
- sea una directiva using (
4.1.11c), o una declaración using (
4.1.11c)
Ejemplos:
Las siguientes sentencias son definiciones:
int a; // define a
extern const int c = 1; // define c
int f(int x) { return x+a; } // define f y x
struct S { int a; int b; }; // define S, S::a, y S::b
struct X {
// define X
int x;
// define el miembro x
static int y;
// declara el miembro estático y
X(): x(0) { }
// define un constructor de X
};
int X::y = 1; // define X::y
enum { up, down }; // define up y down
namespace N { int d; } // define N y N::d
namespace N1 = N; // define N1
X anX;
// define anX
Las siguientes son declaraciones:
extern int a;
// declara a
extern const int c; // declara c
int f(int);
// declara f
struct S;
// declara S
typedef int Int; // declara Int
extern X otroX; // declara otroX
using N::d;
// declara N::d