давайте предположим, что у меня есть некоторый класс А и производные от него B: Я хочу написать operator=
для B (давайте предположим, что у меня есть operator=
в моем класс) правильный способ сделать это:оператор присваивания в C++
B& B::operator=(const B& rhs)
{
if(this == &rhs) return *this;
((A&) *this) = rhs; //<-question
//some other options
return *this
}
какая разница, если я пишу
((A) *this) = rhs;
заранее спасибо
Используйте if (this! = & Rhs) вместо if (this == & rhs). – DumbCoder
@DumbCoder: предполагается, что он поймает 'x == x;' и в настоящее время делает это правильно. Я не согласен с предложенными вами изменениями. –
@Ben Voight, я думаю, DumbCoder предполагает, что OP должен изменить его 'if', чтобы проверить несамоуправление и выполнить операцию копирования, а затем обрабатывать самоопределение в части' else'. Поскольку самоназначение не является (или, по крайней мере, не должно быть) нормальным вариантом использования, это означает, что 'if' почти всегда преуспевает, тем самым предотвращая инструкцию ветвления и связанные с ней потоки трубопроводов. – Praetorian