CV significa Volátil constante. La declaración de un objeto que no está precedido por const y/o volátil es un tipo cv-no calificado. Por otro lado, la declaración de un objeto precedido por const y/o volátil es un tipo calificado por CV. Si un objeto se declara const, el valor en su ubicación no se puede cambiar. Una variable volátil es una variable cuyo valor está bajo la influencia del programador y, por lo tanto, el compilador no puede cambiar por.Los especificadores de clase de almacenamiento se refieren a la vida, el lugar y la forma en que existe un tipo. Los especificadores de clase de almacenamiento son estáticos, mutables, hilt_local y extern.
Este artículo explica los calificadores de C ++ y los especificadores de clase de almacenamiento. Por lo tanto, algún conocimiento preliminar en C ++ es útil para apreciar realmente el artículo.
Contenido del artículo:
Calificadores:
estúpido
Un objeto declarado constante es un objeto el almacenamiento (ubicación) de cuyo valor no se puede cambiar. Por ejemplo, en la declaración:
int const Theint = 5;El valor de 5 en el almacenamiento para elint no se puede cambiar.
volátil
Considere la siguiente declaración:
int portval = 26904873;Los compiladores a veces interfieren con el valor de una variable con la esperanza de optimizar el programa. El compilador puede mantener el valor de una variable como constante cuando se supone que no es constante. El compilador puede interferir los valores de objetos que tienen que ver con los puertos IO mapeados de memoria, o las rutinas de servicio de interrupción de los dispositivos periféricos. Para evitar tal interferencia, haga que la variable sea volátil, como:
int volátil portval;Combinando const y volátiles:
const y volátiles pueden ocurrir en una declaración de la siguiente manera:
int const volátiles portval = 26904873;calificadores CV
Una variable precedida con const y/o volátil es un tipo calificado por CV. Una variable no precedida con const o volátil o ambas veces es un tipo CV no calificado.
Ordenar:
Un tipo puede estar más calificado por CV que otro:
Todavía no se ha concluido si const y volátiles son del mismo rango.
Matriz y objeto instanciado:
Cuando una matriz se declara constante, como en la siguiente declaración, significa que el valor de cada elemento de la matriz no se puede cambiar:
const char arr [] = 'a', 'b', 'c', 'd';Ya sea un 'a', 'b', 'c' o 'd', todavía no se puede cambiar a algún otro valor (carácter).
Una situación similar se aplica a un objeto instanciado de una clase. Considere el siguiente programa:
#incluirDebido a la declaración "const cla obj;" con const en la función main (), ni 'a' ni 'b' ni 'c' ni 'd' se pueden cambiar a algún otro valor.
Especificadores de clase de almacenamiento:
Los especificadores de clase de almacenamiento son estáticos, mutables, hilt_local y extern.
El Especificador de clase de almacenamiento estático
El especificador de clase de almacenamiento estático permite que la variable viva después de que su alcance haya pasado, pero no se puede acceder directamente a la que se puede acceder.
El siguiente programa ilustra esto, con una función recursiva:
#incluirLa salida es:
10 20 30 40 50Si una variable estática no se inicializa en su primera declaración, supone el valor predeterminado para su tipo.
El especificador estático también se puede usar con miembros de una clase; El uso aquí es diferente. Aquí, permite que se acceda al miembro sin instanciación para el objeto.
El siguiente programa ilustra esto para un miembro de datos:
#incluirLa salida es:
8El miembro de datos estáticos debe ser constante. Tenga en cuenta que el uso del operador de resolución de alcance para acceder a la variable estática fuera de su alcance (en la función principal).
El siguiente programa ilustra el uso de "estática" para una función miembro:
#incluirLa salida es:
De la función de miembro estático!
Tenga en cuenta que el uso del operador de resolución de alcance para acceder a la función de miembro estático fuera de su alcance (en la función principal).
El especificador mutable
Recuerde, desde arriba, que si un objeto instanciado comienza con const, el valor de cualquiera de sus miembros de datos normales no se puede cambiar. Y para que cualquier miembro de datos se cambie, debe declararse, mutable.
El siguiente programa ilustra esto:
#incluirLa salida es:
'A "B" Z "D'El especificador thread_local
En la ejecución normal de un programa, se ejecuta un segmento de código, luego el siguiente segmento de código, seguido de otro segmento de código después de eso, y así sucesivamente. Ese es un hilo; el hilo principal. Si se ejecutan dos segmentos de código al mismo tiempo (la misma duración), entonces se necesita un segundo hilo. El resultado del segundo hilo puede incluso estar listo antes del hilo principal.
La función principal () es como el hilo principal. Un programa puede tener más de dos hilos para un comportamiento tan asíncrono.
El segundo hilo necesita un alcance (alcance de bloque) para operar. Esto suele ser proporcionado por el alcance de la función, una función. Una variable en un alcance externo que se puede ver en el alcance del segundo hilo.
El siguiente programa corto ilustra el uso del especificador Thread_Local:
#incluirLa salida es:
1er o hilo principalLa variable, Inter, precedida por Thread_Local, significa que Inter tiene una instancia separada en cada hilo. Y que se puede modificar en diferentes hilos para tener diferentes valores. En este programa, se le asigna el valor, 1 en el hilo principal, y se modifica al valor, 2 en el segundo hilo.
Un hilo necesita un objeto especial para operar. Para este programa, la biblioteca incluida por "#include" tiene una clase llamada hilo, desde el cual el objeto se ha instanciado. El constructor para este objeto toma una referencia a la función de subproceso como argumento. El nombre de la función de subproceso en este programa es thread_function ().
La función miembro de unión () para el objeto especial, en su posición empleada, hace que el hilo principal espere que el segundo hilo termine de ejecutarse antes de que continúe ejecutándose, de lo contrario, la función main () puede salir sin el hilo (segundo) que tiene Produjo su resultado.
El especificador externo
En términos simples, para una declaración, la memoria no se asigna para la variable o la función, mientras que para una definición, la memoria se asigna. La palabra reservada externa permite declarar una variable o función global en un archivo pero definida en otro. Dichos archivos se denominan unidades de traducción para la aplicación C ++ completa.
Escriba el siguiente programa y guárdelo con el nombre de archivo, MainFile:
#incluirLa variable, myint, la variable constante, ch y la función, myfn (), se han declarado sin definirse.
Escriba el siguiente programa con las definiciones y guárdelo con el nombre de archivo, otrofile, en el mismo directorio:
#incluirIntente compilar la aplicación en el terminal (símbolo del sistema DOS) con el siguiente comando y observe que no puede compilar:
G ++ Mainfile.CPP OTROFILE.CPP -O completo.exeAhora, precede a las tres declaraciones en el archivo principal con la palabra "extern", como sigue:
extern int myint;Volver a salvar el archivo principal. Compilar la aplicación con:
G ++ Mainfile.CPP OTROFILE.CPP -O completo.exe(Así es como se compilan los archivos separados para la misma aplicación en C ++)
Y debería compilar. Ahora, ejecute la solicitud, complete.exe, y la salida debe ser:
myfn () dice 10 y cTenga en cuenta que con el uso de "extern", se puede declarar una variable constante en un archivo pero definirse en otro. Al tratar con la declaración de funciones y la definición en diferentes archivos, el uso de extern es opcional.
Cuando usar extern? Úselo cuando no tenga archivos de encabezado con declaraciones globales.
"Extern" también se usa con declaraciones de plantilla; ver más tarde.
Conclusión:
Una variable precedida con const y/o volátil es un tipo calificado por CV. Una variable, no precedida con const o volátil o ambas, es un tipo de CV no calificado.
Los especificadores de clase de almacenamiento son estáticos, mutables, hilt_local y extern. Estos afectan la vida útil (duración), el lugar y la forma de empleo de las variables en una aplicación.