使用静态转换时,转换为 class 类型或对象引用更有意义吗?
When using static cast, does it make more sense to cast as class type or object reference?
我刚刚意识到我可以使用其中任何一个来达到相同的效果。有什么注意事项吗?哪个约定更有意义?
#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;
}
第一次强制转换创建类型为 some_class
的临时对象,通过切片从 *this
初始化,然后在临时对象上调用 echo
,然后销毁临时对象。如果让 echo
函数更新 some_class
的成员变量,您会注意到 *this
实际上没有得到更新。
第二个转换在 *this
对象上调用 some_class::echo();
函数,没有创建任何东西。
通常情况下,第二个选项就是您的目标。正如 davidhigh 在评论中指出的那样,简单地编写 some_class::echo();
而不是使用强制转换是一种更简洁的代码风格(恕我直言)。
我刚刚意识到我可以使用其中任何一个来达到相同的效果。有什么注意事项吗?哪个约定更有意义?
#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;
}
第一次强制转换创建类型为 some_class
的临时对象,通过切片从 *this
初始化,然后在临时对象上调用 echo
,然后销毁临时对象。如果让 echo
函数更新 some_class
的成员变量,您会注意到 *this
实际上没有得到更新。
第二个转换在 *this
对象上调用 some_class::echo();
函数,没有创建任何东西。
通常情况下,第二个选项就是您的目标。正如 davidhigh 在评论中指出的那样,简单地编写 some_class::echo();
而不是使用强制转换是一种更简洁的代码风格(恕我直言)。