C++ Tipos de modificadores

C++ permite quechar, int y doublese coloquen modificadores antes de los tipos de datos.

Los modificadores son palabras clave que se utilizan para cambiar el comportamiento de los tipos de variables, y pueden satisfacer mejor las necesidades de diversas situaciones.

A continuación se enumeran los modificadores de tipos de datos:

  • signed: indica que la variable puede almacenar números negativos. Para variables enteras, signed puede omitirse porque las variables enteras son por defecto de tipo con signo.

  • unsigned: indica que la variable no puede almacenar números negativos. Para variables enteras, unsigned puede duplicar el rango de la variable.

  • short: indica que el rango de la variable es menor que int. short int puede abreviarse como short.

  • long: indica que el rango de la variable es mayor que int. long int puede abreviarse como long.

  • long long: indica que el rango de la variable es mayor que long. Modificador de tipo de datos añadido en C++11.

  • float: representa un número de punto flotante de precisión simple.

  • double: representa un número de punto flotante de doble precisión.

  • bool: representa el tipo booleano, que solo tiene dos valores: true y false.

  • char: representa el tipo de carácter.

  • wchar_t: representa el tipo de carácter ancho, puede almacenar caracteres Unicode.

Modificadoressigned, unsigned, long y shortse pueden aplicar a enteros,signedyunsignedse puede aplicar al tipo carácter,longse puede aplicar al tipo de doble precisión.

Estos modificadores también se pueden usar en combinación. Los modificadoressignedyunsignedtambién se pueden usar comolongoshortprefijo de modificadores. Por ejemplo:unsigned long int。

C++ permite usar notación abreviada para declararenteros cortos sin signooenteros largos sin signo. Puede omitir int y escribir solo la palabraunsigned、shortolong,intes implícito. Por ejemplo, las dos declaraciones siguientes declaran variables enteras sin signo.

signed int num1 = -10; // 定义有符号整型变量 num1,初始值为 -10
unsigned int num2 = 20; // 定义无符号整型变量 num2,初始值为 20

short int num1 = 10; // 定义短整型变量 num1,初始值为 10
long int num2 = 100000; // 定义长整型变量 num2,初始值为 100000

long long int num1 = 10000000000; // 定义长长整型变量 num1,初始值为 10000000000

float num1 = 3.14f; // 定义单精度浮点数变量 num1,初始值为 3.14
double num2 = 2.71828; // 定义双精度浮点数变量 num2,初始值为 2.71828

bool flag = true; // 定义布尔类型变量 flag,初始值为 true

char ch1 = 'a'; // 定义字符类型变量 ch1,初始值为 'a'
wchar_t ch2 = L'你'; // 定义宽字符类型变量 ch2,初始值为 '你'

Para entender cómo C++ interpreta la diferencia entre los modificadores de enteros con signo y sin signo, ejecutemos el siguiente programa corto:

Ejemplos

#include <iostream> using namespace std; /** Este programa demuestra la diferencia entre enteros con signo y enteros sin signo*/ int main() { short int i; // entero corto con signo short unsigned int j; // entero corto sin signo j = 50000; i = j; cout << i << " " << j; return 0; }

Cuando se ejecuta el programa anterior, se obtiene el siguiente resultado:

-15536 50000

En el resultado anterior, el patrón de bits del entero corto sin signo 50,000 se interpreta como el entero corto con signo -15,536.

Calificadores de tipo en C++

Los calificadores de tipo proporcionan información adicional sobre las variables; son palabras clave que se usan para cambiar el comportamiento predeterminado de variables o funciones al definirlas.

CalificadorSignificado
constconstDefine una constante; indica que el valor de la variable no puede modificarse.
volatileEl modificadorvolatileindica que el valor de esta variable puede ser cambiado por factores externos al programa, como el hardware u otros hilos.
restrictRazónrestrictEl puntero modificado es la única forma de acceder al objeto al que apunta. Solo C99 añadió el nuevo calificador de tipo restrict.
mutable mutable se usa para modificar variables miembro de una clase. Las variables miembro modificadas por mutable se pueden modificar incluso si el objeto al que pertenecen es const.
static Se usa para definir variables estáticas; indica que el ámbito de la variable se limita al archivo o función actual y no será accesible desde otros archivos o funciones.
register Se usa para definir variables de registro; indica que la variable se usa con frecuencia y puede almacenarse en los registros de la CPU para mejorar la eficiencia de ejecución del programa.

En C++11 fue marcado como obsoleto (deprecated) En C++17 fue eliminado oficialmente.

Ejemplo de const

const int NUM = 10; // 定义常量 NUM,其值不可修改
const int* ptr = &NUM; // 定义指向常量的指针,指针所指的值不可修改
int const* ptr2 = &NUM; // 和上面一行等价

Ejemplo de volatile

volatile int num = 20; // 定义变量 num,其值可能会在未知的时间被改变

Ejemplo de mutable

class Example {
public:
    int get_value() const {
        return value_; // const 关键字表示该成员函数不会修改对象中的数据成员
    }
    void set_value(int value) const {
        value_ = value; // mutable 关键字允许在 const 成员函数中修改成员变量
    }
private:
    mutable int value_;
};

Ejemplo de static

void example_function() {
    static int count = 0; // static 关键字使变量 count 存储在程序生命周期内都存在
    count++;
}

Ejemplo de register

void example_function(register int num) {
    // register 关键字建议编译器将变量 num 存储在寄存器中
    // 以提高程序执行速度
    // 但是实际上是否会存储在寄存器中由编译器决定
}

Cambios de register después de C++11:

  • En C++11 fue marcado como obsoleto (deprecated)
  • En C++17 fue eliminado oficialmente
  • Se mantiene como palabra clave (posiblemente para compatibilidad o uso futuro).
Otras extensiones