(2) constante y estático

El papel de la palabra clave estática:

c / c ++ tiene:

       1):修饰全局变量时,表明一个全局变量只对定义在同一文件中的函数可见。                         

       2):修饰局部变量时,表明该变量的值不会因为函数终止而丢失。              

       3):修饰函数时,表明该函数只在同一文件中调用。

C ++ único:

       4):修饰类的数据成员,表明对该类所有对象这个数据成员都只有一个实例。即该实例归 所有对象共有。

       5):用static修饰不访问非静态数据成员的类成员函数。这意味着一个静态成员函数只能访问它的参数、类的静态数据成员和全局变量

Características de las variables locales estáticas:
(1) La variable asigna memoria en el área de datos globales (las variables locales asignan memoria en el área de la pila)
(2) La variable local estática se inicializa por primera vez cuando el programa se ejecuta con la declaración de el objeto, es decir, llamadas de función posteriores No más inicialización
(las variables locales se inicializarán cada vez que se llame una función)
(3) Las variables locales estáticas generalmente se inicializan en el lugar de la declaración, si no se muestra la inicialización, se inicializarán automáticamente a 0 por el programa
(las variables locales no serán inicializadas)
(4) Siempre reside en el área de datos globales, hasta el final del programa. Pero su alcance es un alcance local, es decir, no se puede usar fuera de la función
(las variables locales están en el área de la pila y la memoria se libera inmediatamente después de que finaliza la función)

Características de las variables globales estáticas:
(1) Las variables globales estáticas no pueden ser utilizadas por otros archivos (las variables globales están bien)
(2) Las variables con el mismo nombre también se pueden definir en otros archivos sin conflicto (archivos de aislamientos estáticos y otros archivos lo mismo La variable del nombre no tiene nada que ver con eso)

Características de las funciones estáticas:
(1) Las funciones estáticas no pueden ser utilizadas por otros archivos
(2) Otros archivos pueden definir funciones con el mismo nombre sin conflicto

Características de las funciones de miembros estáticos:
(1) Los miembros estáticos pueden acceder entre sí, incluidas las funciones de miembros estáticos para acceder a miembros de datos estáticos y funciones de miembros estáticos
(2) Las funciones de miembros no estáticos pueden acceder arbitrariamente a funciones de miembros estáticos y miembros de datos estáticos
(3) Las funciones miembro estáticas no se pueden usar para funciones miembro no estáticas y miembros de datos no estáticos.
(4) Para llamar a funciones miembro estáticas, puede usar operadores de acceso miembro (.) Y (->) para llamar miembros estáticos para un objeto de clase y un puntero a la función del objeto de clase,
también puede usar el nombre de la clase :: nombre de la función para llamar

Para las funciones miembro de datos no estáticos, cada objeto (instancia) tiene su propia copia.
Los miembros de datos estáticos se tratan como miembros de la clase y todos los objetos del tipo tienen acceso compartido. Para varios objetos de la clase, los miembros de datos estáticos se asignan solo una vez. Los
miembros de datos estáticos se almacenan en el área de datos globales. A los miembros de datos estáticos se les debe asignar memoria cuando se definen, por lo que no se pueden definir en la declaración de clase.

El papel de la palabra clave const

1) Para evitar que se cambie una variable, puede usar const. Cuando defina la variable const, primero debe inicializarla y no habrá posibilidad de cambiarla más tarde;

2) Para los punteros, el puntero en sí se puede designar como const, los datos apuntados por el puntero también se pueden designar como const, o ambos se pueden designar como const;

3) En una declaración de función, const puede modificar el parámetro formal para indicar que es un parámetro de entrada y su valor no se puede cambiar dentro de la función;

4) Para la función miembro de una clase, a veces debe especificarse como un tipo constante, lo que indica que es una función constante y no puede modificar la variable miembro de la clase;

5) Para las funciones miembro de una clase, a veces es necesario especificar el valor de retorno del tipo const, de modo que el valor de retorno no sea un "lvalue".

variable modificada const
(1) el valor de la variable no se puede cambiar

const modifica el puntero
(1) si const está a la izquierda, entonces const se usa para modificar la variable a la que apunta el puntero, es decir, el puntero apunta a una constante
(2) si const está
a la derecha, const es a modificar el puntero en sí, es decir, el puntero en sí es constante

 指针常量:不能通过指针来修改变量的值。
 常量指针:一直指向该变量,不能给该指针赋予其他地址

Use const en la función
(1) const modifica el parámetro de la función para
indicar que el parámetro es inmutable

  • Si el parámetro es una referencia, puede aumentar la eficiencia.

  • El efecto de pasar la referencia constante y pasar la función por valor es el mismo, pero pasar por valor primero creará una copia del objeto de clase, y luego lo pasará, y pasará directamente la dirección, por lo que esta transferencia es más efectiva que pasar por valor

  • Cuando const se pasa por valor, es solo una copia del objeto externo. El cambio de valor no tendrá ningún efecto en el exterior, por lo que no tiene sentido: incorrecto, el propósito importante es decir que esta variable no está permitida modificarse, y la eficiencia de pasar por referencia será mayor. Eso es todo.
    (2) El
    significado del valor de retorno de la función modificada const es el mismo que el de la variable y el puntero modificados const

El uso de const en las
variables miembro modificadas const de la clase (1)

  • Indica que la variable miembro no se puede modificar y solo se puede asignar en la lista de inicialización
    (2) función miembro modificada const

  • La función no puede cambiar las variables miembro del objeto

  • No se puede llamar a funciones miembro que no son constantes, porque cualquier función miembro que no sea constante intentará modificar las variables miembro

  • Las funciones miembro const pueden ser llamadas por un objeto de clase const. Es decir, los objetos de la clase const solo pueden llamar a funciones miembro const

  • La palabra clave const no se puede usar con la palabra clave estática al mismo tiempo, porque la palabra clave estática modifica una función miembro estática. La función miembro estática no contiene el puntero this, es decir, no se puede crear una instancia. La función miembro const debe ser específico de una instancia.


Cualquier miembro del objeto de clase const modificado no se puede modificar,
solo se puede llamar a la función del miembro const

Pregunta: ¿Se pueden declarar todas las funciones de una clase como funciones constantes? ¿Qué funciones no pueden?
(1) El constructor no puede:

  • La función modificada const significa que el valor de retorno de la función es de tipo const, y el valor de retorno solo se puede asignar a variables const del mismo tipo.

  • const es una función miembro que puede modificar la clase, pero la función no puede modificar el miembro de datos. El constructor también pertenece a la función miembro de la clase, pero el constructor debe modificar las variables miembro de la clase, por lo que el constructor de la clase no puede declararse como tipo constante.
    (2) La función de miembro estático no funciona

Los miembros estáticos estáticos pertenecen a la clase, no a un objeto específico, todos los objetos comparten miembros estáticos. Este puntero es la dirección de un objeto específico, por lo que las funciones miembro estáticas no tienen este puntero. La const en la función se usa realmente para modificar el puntero this, lo que significa que el contenido apuntado por this es inmutable, por lo que const no se puede usar para modificar la función miembro estática

Supongo que te gusta

Origin blog.csdn.net/qq_40329851/article/details/114273901
Recomendado
Clasificación