При использовании статического приведения имеет ли смысл приводить к типу класса или к ссылке на объект?
Я просто понял, что могу использовать любой из них для достижения того же эффекта. Есть ли какие-либо предостережения? Какое соглашение имеет больше смысла?
#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();
вместо использования актерского состава.