如何在没有C++ 11的情况下检查对象是否为const std::is_const?据我所知,我不应该是const_cast一个声明为 const 的对象
jog*_*pan 12
is_const在cppreference上给出了C++ 11的示例实现,它看起来像这样:
template<class T> struct is_const : false_type {};
template<class T> struct is_const<const T> : true_type {};
Run Code Online (Sandbox Code Playgroud)
如果你把这个定义放在你的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; }
};
Run Code Online (Sandbox Code Playgroud)
唯一的区别是静态value只是一个而const不是一个constexpr,但请注意它是一个常量表达式,可以用作模板参数.因此,出于所有实际目的,上面的定义应该适用于C++ 03.
关于问题的最后一部分:将非const类型转换为const实际上没有问题.(但是,指针指针或对指针的引用可能会出现非法情况,例如T**无法转换为const T**.)
| 归档时间: |
|
| 查看次数: |
797 次 |
| 最近记录: |