C++ Модификаторы типа

C++ позволяет размещать модификаторы перед типами данныхchar, int и double.

Модификаторы — это ключевые слова, используемые для изменения поведения типов переменных, что лучше отвечает потребностям различных ситуаций.

Модификаторы типов данных перечислены ниже:

  • signed: указывает, что переменная может хранить отрицательные числа. Для целочисленных переменных signed можно опустить, поскольку целочисленные переменные по умолчанию являются signed.

  • unsigned: указывает, что переменная не может хранить отрицательные числа. Для целочисленных переменных unsigned может удвоить диапазон переменной.

  • short: указывает, что переменная имеет меньший диапазон, чем int. short int можно сократить до short.

  • long: указывает, что переменная имеет больший диапазон, чем int. long int можно сократить до long.

  • long long: указывает, что переменная имеет больший диапазон, чем long. Модификатор типа данных, добавленный в C++11.

  • float: представляет число с плавающей запятой одинарной точности.

  • double: представляет число с плавающей запятой двойной точности.

  • bool: представляет логический тип, который имеет только два значения: true и false.

  • char: обозначает символьный тип.

  • wchar_t: представляет широкий символьный тип, который может хранить символы Unicode.

Модификаторыsigned, unsigned, long и shortМожно применять к целочисленным типам,signedиunsignedМожно применять к символьным типам,longМожно применять к типам двойной точности.

Эти модификаторы также можно использовать в комбинации. Модификаторыsignedиunsignedтакже можно использовать какlongилиshortПрефикс модификатора. Например:unsigned long int。

C++ позволяет использовать сокращённую запись для объявленияunsigned short integerилиunsigned long integer. Можно опустить int и просто написать словоunsigned, shortилиlong,,intподразумевается. Например, следующие две инструкции обе объявляют беззнаковые целочисленные переменные.

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,初始值为 '你'

Чтобы понять разницу между модификаторами знаковых и беззнаковых целых чисел, как их интерпретирует C++, давайте запустим следующую короткую программу:

Пример

#include <iostream> using namespace std; /** Эта программа демонстрирует разницу между знаковыми и беззнаковыми целыми числами.*/ int main() { short int i; // знаковое короткое целое short unsigned int j; // беззнаковое короткое целое j = 50000; i = j; cout << i << " " << j; return 0; }

Когда вышеприведённая программа запустится, она выведет следующие результаты:

-15536 50000

В приведённых выше результатах битовый шаблон беззнакового короткого целого 50,000 интерпретируется как знаковое короткое целое -15,536.

Квалификаторы типов в C++

Квалификаторы типов предоставляют дополнительную информацию о переменных; это ключевые слова, используемые для изменения поведения переменных или функций по умолчанию при их определении.

КвалификаторыЗначение
constconstОпределяет константу, указывая, что значение переменной не может быть изменено.
volatileМодификаторыvolatileУказывает, что значение переменной может быть изменено факторами вне программы, такими как аппаратное обеспечение или другие потоки.
restrictс помощьюrestrictУказатель, изменённый таким образом, является единственным способом доступа к объекту, на который он указывает. Только C99 добавил новый квалификатор типа restrict.
mutable mutable используется для изменения переменных-членов класса. Переменные-члены, изменённые с помощью mutable, можно изменять, даже если объект, которому они принадлежат, является const.
static Используется для определения статических переменных, указывая, что область видимости переменной ограничена текущим файлом или текущей функцией и недоступна другим файлам или функциям.
регистр Используется для определения register-переменных, указывая, что переменная часто используется и может храниться в регистрах процессора, чтобы повысить эффективность выполнения программы.

Помечен как устаревший в C++11, официально удалён в C++17.

пример const

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

пример volatile

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

пример 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_;
};

пример static

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

пример register

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

Изменения в register после C++11:

  • Помечено как устаревшее в C++11.
  • Официально удалено в C++17
  • Зарезервировано как ключевое слово (возможно, для совместимости или будущего использования)
Другие расширения