类型特征不起作用

时间:2011-02-27 18:02:51

标签: c++ metaprogramming

这:

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

打印出false,我认为它应该打印为true。为什么打印错误?

3 个答案:

答案 0 :(得分:9)

因为const int *是指向常量整数变量指针。

std::is_const< int * const >::valuetrue因为类型是指向变量整数的常量指针。 const绑定到它之前的任何内容,除非它是类型说明符中的第一个。我避免把它放在第一位,以避免调用这个“特殊规则”。

常量指针通常由C ++中的引用表示。

要获取有关所指类型的信息,请使用std::remove_pointer

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

true

答案 1 :(得分:1)

因为指向常量的指针不是常数。你可能想要cout << std::is_const<int *const>::value;(指向int的常量指针)

答案 2 :(得分:1)

正如其他人所提到的,你所拥有的是指向const int非const 指针。你问的是指针是不是const,而不是,它可以被改变。它只是指向const的东西。如果你想知道指向类型是否是const,那么这样的东西应该有用:

std::is_const<std::iterator_traits<const int*>::value_type>::value;