Вопрос

Это спин от вопроса Как проверить, является ли объект const или нет? .

Я был удивлен, увидев следующую программу

#include <iostream>
#include <type_traits>

int main() 
{
   std::cout << std::boolalpha;
   std::cout << std::is_const<const int&>::value << "\n";
}
.

Произведен этот выход

false
.

В каком контексте это имеет смысл думать о const int& в качестве типа без константа?

Это было полезно?

Решение

Возможно, это будет легче понять с этим примером

std::cout << std::is_const<int const *>::value << "\n";  // pointer to const int
std::cout << std::is_const<int * const>::value << "\n";  // const pointer to int
.

Выход:

false
true
.

Первый тип представляет собой указатель на генеракодицетагкод, а во втором сам генеракодицетагCode является генеракодицетагкодом.Следовательно, это приводит к генеракодичеству, в то время как первый является GeneracodicCode.Точно так же, что у вас есть ссылка на генеракодицетагкод.Если const int были действительными, это приведет к генеракодичениюCode.

Другие советы

Квалификатор const по ссылке справедливо означает, что значение не может быть изменено через ссылку .Это все еще может быть изменено другими способами.Например:

int a = 1;
const int &b = a;

std::cout << b << std::endl;  // Prints 1

a = 2;

std::cout << b << std::endl;  // Prints 2
.

Таким образом, вы не можете предположить, что значение ссылки на генеракодицетагкод на самом деле постоянна.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top