我刚刚意识到我可以使用其中任何一种来达到同样的效果。有什么警告吗?哪种惯例更有意义?
#include <iostream>
using namespace std;
class some_class {
public:
void echo() {
cout << 1 << endl;
}
};
class other_class : public some_class {
public:
void echo() {
// Does it matter?
static_cast<some_class>(*this).echo();
static_cast<some_class&>(*this).echo();
}
};
int main() {
other_class a;
a.echo();
return 0;
}
答案 0 :(得分:3)
第一个强制转换创建一个some_class
类型的临时对象,通过切片从*this
初始化,然后在临时对象上调用echo
,然后销毁临时对象。如果您将echo
函数更新为some_class
的成员变量,您会注意到*this
实际上没有更新。
第二个演员在some_class::echo();
对象上调用*this
函数,而不创建任何内容。
通常,第二个选项是您的目标。正如davidhigh在评论中所指出的那样,简单地编写some_class::echo();
而不是使用强制转换是一种更清晰的代码风格(恕我直言)。