При использовании статического приведения имеет ли смысл приводить к типу класса или к ссылке на объект?

Я просто понял, что могу использовать любой из них для достижения того же эффекта. Есть ли какие-либо предостережения? Какое соглашение имеет больше смысла?

#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;
}

1 ответ

Решение

Первое приведение создает временный объект типа some_class, инициализированный из *this нарезая, затем вызывает echo на временном объекте, затем уничтожает временный объект. Если вы сделали echo Функция обновления переменной-члена some_classвы бы заметили, что *this на самом деле не обновляется.

Второй актерский колл some_class::echo(); функция на *this объект, не создавая ничего.

Как правило, второй вариант - это то, к чему вы стремитесь. Как отметил Дэвид Хай в комментариях, это более чистый стиль кода (IMHO в любом случае), чтобы просто написать some_class::echo(); вместо использования актерского состава.

Другие вопросы по тегам