dev - constantes en c++ ejemplos



¿Por qué se permite la definición múltiple de una variable global const en C++ y no en C? (4)

La definición múltiple de una variable global no está permitida en C o C ++ debido a la Regla de una definición. Sin embargo, en C ++ se puede definir una variable global constante en varias unidades de compilación sin error. Esto no es lo mismo que en C.

¿Por qué C ++ permite esto mientras que C no? ¿Por qué el uso y el comportamiento de una constante global difieren de una global no constante de esta manera en C ++ en comparación con C? ¿Qué está pasando bajo las coberturas con C ++ y C con respecto a const?

Por ejemplo, esto está permitido en C ++, pero incorrecto en C:

// Foo.cpp
const int Foo = 99;

// Main.cpp
const int Foo = 99;
int main()
{
    cout << Foo << endl;
    return 0;
}

Y esto está bien con C, pero mal con C ++:

// Foo.cpp
const int Foo = 99;

// Main.cpp
extern const int Foo;
int main()
{
    cout << Foo << endl;
    return 0;
}

https://src-bin.com


Answer #1

Básicamente, en C ++, const, las variables no locales son expresiones constantes genuinas, o constexpr. Esto permite muchas cosas, como TMP.

const int five = 5;
int main() {
    int x[five];
    std::array<int, five> arr;
}

En C, son solo una variable que no puede ser modificada. Es decir,

const int five = 5;
int main() {
    int x[five]; // Technically, this is a variable length array
}

Es bastante equivalente a

int five = 5;
int main() {
    int x[five];
}

Efectivamente, C ++ promueve algunos tipos de variable const a una nueva categoría, constexpr , mientras que en C, esto no existe y son solo variables que resultan no modificables.


Answer #2

Creo que está pidiendo la razón y no la regla de lenguaje específica que lo permite.

La razón de esto es que hace que las variables const sean mucho más fáciles de usar. Da un reemplazo escrito para un uso común de #define .

En lugar de #define MAX_COUNT 211 puede usar const int max_count = 211; exactamente de la misma manera, por ejemplo, un archivo de encabezado compartido, sin tener que preocuparse por dónde colocar la definición.

No puede cambiar legalmente el valor de un objeto const por lo que no hay una diferencia visible entre tener un objeto y varios objetos con el mismo valor.

Como puede poner una definición de un objeto const en un archivo de encabezado, hace que el compilador utilice el valor directamente en la etapa de compilación, sin que dichas optimizaciones deban ser retrasadas para una reparación de tiempo de enlace.



Answer #4

¿Por qué los ingleses deletrean el COLOR, mientras que los americanos lo escriben con el COLOR?

Son 2 idiomas diferentes de la misma base, pero no tienen las mismas reglas.

C y C ++ son lo mismo. Si no fueran diferentes, ambos serían llamados lo mismo.





one-definition-rule