C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了c – boost :: any_cast(const any&)使用const_cast <> - 这不是可能的UB吗?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
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,则使用COnst_cast<>可能会导致未定义的行为

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); }
};

那么,是提升犹太人吗?

解决方法

这是合法代码,因为any_cast返回接收指针的const-pointer和any_cast,不会更改其参数.

如果使用COnst_cast,UB标准只能在1种情况下:

n3376 5.2.11 / 7

大佬总结

以上是大佬教程为你收集整理的c – boost :: any_cast(const any&)使用const_cast <> - 这不是可能的UB吗?全部内容,希望文章能够帮你解决c – boost :: any_cast(const any&)使用const_cast <> - 这不是可能的UB吗?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。