Оператор присваивания по умолчанию во внутреннем классе со ссылочными участниками

Они также полезны, когда Вам нужны несколько "конструкторов" с тем же типом параметра, но с различным поведением.

7
задан laura 2 December 2009 в 12:48
поделиться

4 ответа

Эта проблема не имеет ничего общего с внутренними классами. В C ++ вы просто не можете (повторно) назначать ссылки - они должны быть инициализированы при определении.

Более простой пример:

class B
{
public:
    B(int& i) : ir(i) {};

    int& ir;
};


int main()
{
    int i;
    B b(i);      // Constructor - OK

    int j;
    B bb = B(j); // Copy constructor - OK

    bb = b;      // Assignment - Error
    return 0;
}
13
ответ дан 6 December 2019 в 08:15
поделиться

Ссылка не может быть изменена после того, как ей присвоено начальное значение. Это означает, что невозможно написать оператор присваивания, который изменяет значение ссылочного члена. Если вам нужно это сделать, используйте указатель вместо ссылки.

6
ответ дан 6 December 2019 в 08:15
поделиться

В C ++ нет «внутренних классов», только объявления вложенных классов. «внутренние классы» - это Java-ism, который, я не думаю, можно найти в других основных языках. В Java внутренние классы особенные, потому что они содержат неявную неизменяемую ссылку на объект содержащего типа. Для достижения эквивалента вложенным объявлениям C ++ в Java требуется использование статических внутренних классов; статические внутренние классы не содержат ссылки на объект объявляющего типа.

0
ответ дан 6 December 2019 в 08:15
поделиться

На самом деле, есть решение этой проблемы. Вы можете реализовать operator = в терминах конструкции копирования , и он будет работать :) Это очень эффективный метод для таких случаев. Предполагая, что вы действительно хотите поддержать назначение.

3
ответ дан 6 December 2019 в 08:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: