У меня простой вопрос: как я знаю, я могу объявить указатель const
на некоторый тип данных или указатель на постоянный тип данных, но я могу только объявить ссылку только на постоянный тип данных и не указывать постоянную ссылку на тип данных;тот факт, что ссылка уже является константой, потому что она не может быть связана с другим объектом.
Так что, когда я пытаюсь создать const ref to someDataType
, я получаю ошибку во время компиляции.Но то, что имеет значение для меня, - это когда используется type alias
с использованием typedef
или using
.Например:
#include <iostream>
int main() {
int i{ 10 };
// int& const r1{ i }; // error: ‘const’ qualifiers cannot be applied to ‘int&’. Ok here.
using rInt = int&; // or typedef int& rInt;
const rInt r2{ i }; // why const is allowed here?
++r2; // this proves that the const is applied to the reference not to the object referred to.
std::cout << r2 << std::endl; // 11
}
Как вы можете видеть выше, я могу добавить const
к ссылке, которая, на мой взгляд, является избыточной в этом контексте.Но почему C ++ допускает это с псевдонимами типов, но не напрямую?