2016-12-13 10 views
-2

Если задана функция operator=, как я могу проверить, совпадают ли два адреса памяти? Я считаю, что следующее верно, но использует оператор ==, а не тот, который определен. Как мне это сделать с оператором =?Как проверить, совпадают ли два адреса?

if(&this == &rhs) 
    return true; 
+3

'operator =' оператор _assignment_, а не сравнение. –

+0

'if (& this == & rhs)' Вероятно, вы хотите использовать 'if (this == & rhs)', но слишком сильно сузили контекст вашего вопроса. –

+0

_ «Как мне сделать это с помощью оператора =?» А? Чего вы пытаетесь достичь? –

ответ

1

Вы не сравниваете правильный адрес. this уже является указателем на ваш объект. И кажется, вы пытаетесь реализовать общую картину:

Foo & Foo::operator=(const Foo & rhs) 
{ 
    if(this == &rhs) 
    { 
     // ::: 
    } 

    // ::: 
} 

выше, тип this является Foo* и &rhs является Foo const *, что делает их сопоставимыми.


[Edit: добавлены соответствующие части из стандарта, заимствованные из C++ 14 проекта стандарта]

Из раздела 5.3.1 [expr.unary.op]:

  1. Результат унарного оператора & является указателем на его операнд. Операнд должен быть lvalue или квалифицированный идентификатор. ...

из раздела 9.3.2 [class.this]:

  1. В теле нестатической функции члена, ключевое слово это является выражение prvalue, значение которого является адресом объекта, для которого вызывается функция.

Поскольку this ни именующий, ни квалифицирован-идентификатор, вы не можете взять его адрес и ваш компилятор должен сообщить об ошибке, если вы попробуете.

 Смежные вопросы

  • Нет связанных вопросов^_^