检查C 03上是否为const

前端之家收集整理的这篇文章主要介绍了检查C 03上是否为const前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
如果一个对象是没有C 11的std :: is_const的const,据我所知,我不应该const_casting一个被声明为const的对象

解决方法

C11的is_const的示例实现在 cppreference给出,如下所示:
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; }
};

唯一的区别是静态值只是一个const,而不是一个constexpr,但是注意它是一个常量表达式,可以用作模板参数.所以为了所有实际的目的,上面的定义应该在C 03中运行.

关于你的问题的最后一部分:实际上没有问题将const的const类型转换成const. (但是,可能会引发指针或指针引用的非法情况,例如T **不能转换为const T **.)

猜你在找的C&C++相关文章