【发布时间】:2012-11-20 03:26:23
【问题描述】:
如果没有 C++11 的 std::is_const,我如何检查对象是否为 const?据我所知,我不应该 const_casting 一个声明 const
【问题讨论】:
-
根据本节的限制,可以使用 const_cast 运算符将表达式转换为自己的类型。 - 5.2.11/2
-
你实际上误解了你应该做什么和不应该做什么。您不应该抛弃最初声明为
const的对象的常量性。话虽如此,您不能使用is_const(C++11 或您自己的)来检测这一点,因为这只会处理您拥有的引用类型,这可能比实际对象更符合 const 条件。 -
注意:对象 const(ness) 是在编译时定义的。这不是运行时功能。因此术语
check if an object is const并不是真正正确的术语。您可以根据模板参数 const(ness) 生成不同的代码,但这是编译时功能。注意:强制转换(包括 const_cast)是运行时活动而不是编译时。 -
@LokiAstari:我不确定我是否跟随。只有
dynamic_cast具有运行时行为,所有其他都只是编译时类型转换。 -
@GManNickG:措辞不当。它是一种应用于运行时对象的操作。