这:
cout << std::is_const<const int*>::value;
打印出false,我认为它应该打印为true。为什么打印错误?
答案 0 :(得分:9)
因为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 :(得分: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;