4

我正在阅读 Scott Meyers 的 Effective C++ 3rd。
在第 3 项中:

尽可能使用 const。为了使用 const 成员函数 operator[],非 const 成员函数 operator[] 必须进行 2 次强制转换操作:

const_cast<char&>(
  static_cast<const TextBlock&>(*this)
         [position]
)

为什么斯科特迈耶斯使用static_cast<const TextBlock&>(*this)而不是static_cast<const TextBlock>(*this)

4

1 回答 1

3

static_cast<const TextBlock>(*this)将创建一个临时对象,该对象从*this. 然后operator[]会在它上面被调用,char&当退出非常量成员函数时,返回的会被悬空operator[]。请注意,对它的取消引用会导致 UB。

于 2016-03-23T08:41:50.553 回答