я был весьма удивлен, что следующий код:Почему ссылка const не считается const с использованием свойства типа is_const?
#include <iostream>
#include <type_traits>
using namespace std;
int main(int argc, char* argv[]) {
cout << boolalpha << is_const<const float&>::value << endl;
return 0;
}
Печать false
. Удаление ссылок работает правильно:
#include <iostream>
#include <type_traits>
using namespace std;
int main(int argc, char* argv[]) {
cout << boolalpha << is_const<remove_reference<const float&>::type>::value << endl;
return 0;
}
Распечатка true
.
Оба были составлены с g++ -std=c++11 test.cpp
, используя G ++ версии:
g++ (Ubuntu 5.3.0-1ubuntu1~14.04) 5.3.0 20151204
Думая об этом, я могу понять, что существует два типа в игре здесь: тип ссылки и тип, на который ссылается. Тип, на который ссылаются, равен const
, поэтому второй случай имеет смысл. В первом случае я бы ожидал, что он вернется, если ссылочный тип равен const
или всегда true
, потому что ссылки AFAIK не могут быть «переназначены».
Почему он возвращает false
?
Спасибо за ответ. Пример указателя действительно сделал это! –