【发布时间】:2014-05-20 08:42:28
【问题描述】:
boost/any.hpp(1.55 版)定义(第 263 行)
template<typename ValueType>
inline const ValueType * any_cast(const any * operand) BOOST_NOEXCEPT
{
return any_cast<ValueType>(const_cast<any *>(operand));
}
然而,使用const_cast<>,可能会导致未定义的行为如果原始对象没有声明const,如
class foo
{
boost::any value;
template<typename T>
foo(T const&x) noexcept : value(x) {}
template<typename T>
const T*ptr() const noexcept
{ return boost::any_cast(value); }
};
那么,boost 是否符合规定?
【问题讨论】:
-
你不是在那儿引错了吗? UB 如果我从最初的非常量 obj 中删除 const?
-
它可能导致UB 如果函数返回一个指向非const值类型的指针,但事实并非如此。不断进,不断出。函数里面的代码?它只是强制转换,不会修改对象。
-
嗯。我可能被旧标准误导了。所以
const_cast<>(non_const_object)毕竟不是(可能)UB? -
旧标准对此没有任何问题 AFAIK