首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >检查C++03上是否有const

检查C++03上是否有const
EN

Stack Overflow用户
提问于 2012-11-20 03:26:23
回答 1查看 841关注 0票数 9

如果没有C++11的std::is_const,如何检查对象是否为const?据我所知,我不应该使用const_cast作为声明的 const对象

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-11-20 03:33:19

C++11的is_const的一个示例实现是在优先选择上给出的,如下所示:

代码语言:javascript
复制
template<class T> struct is_const          : false_type {};
template<class T> struct is_const<const T> : true_type {};

如果将这个定义放入您的C++03代码中,您也可以在那里使用is_const,如果您添加了false_typetrue_type的定义(感谢mfonantini指出缺少的true_typefalse_type)。如果按照以下方式定义它们,您将非常接近C++11中使用的定义:

代码语言:javascript
复制
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**)。

票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13466146

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档