C++ 使用静态转换时,转换为类类型或对象引用是否更有意义?

C++ 使用静态转换时,转换为类类型或对象引用是否更有意义?,c++,static-cast,C++,Static Cast,我刚刚意识到我可以用其中任何一种来达到同样的效果。有什么警告吗?哪个公约更有意义 #include <iostream> using namespace std; class some_class { public: void echo() { cout << 1 << endl; } }; class other_class : public some_class { public: void 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;
}
#包括
使用名称空间std;
上课{
公众:
void echo(){

cout第一次强制转换创建一个类型为
some_class
的临时对象,通过切片从
*this
初始化,然后对临时对象调用
echo
,然后销毁临时对象。如果让
echo
函数更新
some_class
的成员变量,您会注意到
*t他的
实际上没有得到更新

第二个cast在
*this
对象上调用
some_class::echo();
函数,而不创建任何内容


通常,第二个选项是您的目标。正如davidhigh在评论中指出的那样,简单地编写
some_class::echo();
而不是使用强制转换是一种更简洁的代码样式(无论如何,这是不需要的)。

您进行向上转换,即从派生到基。这里不需要简单的
some_class::echo()就足够了。在一个下流(例如在CRTP框架中),通常你会使用(const)引用派生版本。我现在在这个宏上下文中使用静态的CAST,这对于范围操作符来说是不起作用的:谢谢你的澄清。我有时会困惑java和C++之间的跳跃。