如果没有C++11的std::is_const,如何检查对象是否为const?据我所知,我不应该使用const_cast作为声明的 const对象
发布于 2012-11-20 03:33:19
C++11的is_const的一个示例实现是在优先选择上给出的,如下所示:
template<class T> struct is_const : false_type {};
template<class T> struct is_const<const T> : true_type {};如果将这个定义放入您的C++03代码中,您也可以在那里使用is_const,如果您添加了false_type和true_type的定义(感谢mfonantini指出缺少的true_type和false_type)。如果按照以下方式定义它们,您将非常接近C++11中使用的定义:
struct true_type {
static const bool value = true;
typedef bool value_type;
typedef true_type type;
operator value_type() const { return value; }
};
struct false_type {
static const bool value = false;
typedef bool value_type;
typedef false_type type;
operator value_type() const { return value; }
};唯一的区别是静态value只是一个const,而不是一个constexpr,但是请注意,它仍然是一个常量表达式,可以用作模板参数。因此,就所有实际目的而言,上述定义应该适用于C++03。
关于你问题的最后一部分:实际上向const投射一个非const类型是没有问题的。(但是,当指针指向指针或引用指针时,可能会出现非法情况,例如不能将T**转换为const T**)。
https://stackoverflow.com/questions/13466146
复制相似问题