为什么在const和非const方法中删除代码重复不是不确定的行为



我在与const_cast相关的堆栈溢出上找到了两个问题:

1)如何在类似的const和非Const成员功能之间删除代码重复?

2)这种不确定的行为是const_cast吗?

说我们要避免像问题1的答案一样避免代码重复:

struct C
{
  const char& get() const
  {
    return c;
  }
  char& get()
  {
    return const_cast<char&>(static_cast<const C&>(*this).get());
  }
  char c;
};

让我们这样使用那个类:

C obj;
obj.get() = 'a';

当我看到我们在getter函数内部抛弃了c的构造并分配给其新值,因此根据第二个问题,我们应该获得未定义的行为。

为什么分配给c不是不确定的行为?

修改const对象是UB。

  • obj未声明为const
  • static_cast<const C&>(*this)" Just" 一个别名。

所以你在这里很好。

相关内容