在Effective C ++ Item 3中,为什么要使用static_cast <const textblock&=“”>(* this)而不是static_cast <const textblock =“”>(* this)?

时间:2016-03-23 08:27:03

标签: c++ reference effective-c++

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

  

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

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

为什么Scott Meyers使用static_cast<const TextBlock&>(*this)代替static_cast<const TextBlock>(*this)

1 个答案:

答案 0 :(得分:2)

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