我正在阅读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)
?
答案 0 :(得分:2)
static_cast<const TextBlock>(*this)
将创建一个临时对象,该对象从*this
复制。然后将在其上调用operator[]
,并且当退出非const成员函数char&
时,返回的operator[]
将被悬空。请注意,取消引用它会导致UB。