我在与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" 一个别名。
所以你在这里很好。