Тип черты не работает - PullRequest
1 голос
/ 27 февраля 2011

Это:

cout << std::is_const<const int*>::value; 

выводит значение false, и я думаю, что оно должно выводить значение true. Почему он печатает false?

Ответы [ 3 ]

9 голосов
/ 27 февраля 2011

Поскольку const int * является переменной , указатель на постоянное целое число .

std::is_const< int * const >::value равно true, поскольку тип является константным указателем на целое число переменной. const привязывается к любому предшествующему, если только он не находится первым в спецификаторе типа. Я избегаю ставить его первым, чтобы не ссылаться на это "особое правило".

Указатели констант обычно представлены ссылками в C ++.

Чтобы получить информацию о указанном типе, используйте std::remove_pointer.

std::is_const< typename std::remove_pointer< const int * >::type >::value

- это true.

1 голос
/ 27 февраля 2011

Как уже упоминали другие, у вас есть неконстантный указатель на const int. Вы спрашиваете, является ли указатель постоянным, и это не так, его можно изменить. Это просто указывает на то, что является постоянным. Если вы хотите знать, является ли указанный тип константным, что-то вроде этого должно работать:

std::is_const<std::iterator_traits<const int*>::value_type>::value; 
1 голос
/ 27 февраля 2011

Потому что указатель на константу не является константой. Вы, вероятно, хотели cout << std::is_const<int *const>::value; (постоянный указатель на int)

...