Что означает «инициализация по умолчанию в контексте инициализации копирования» в C ++? - PullRequest
0 голосов
/ 07 мая 2018

Например, я понимаю, что понимаю, что означает инициализация списка в контексте прямой инициализации (против копирования) - int x{} против int x = {} в основном.

Но на cppreference Я нашел это:

Когда объект типа класса инициализируется путем копирования из объекта того же или производного типа класса или инициализируется по умолчанию в контексте инициализации копирования, все функции-кандидаты являются конструкторами преобразования инициализируемого класса. Список аргументов является выражением инициализатора.

Полагаю, я понимаю, почему кандидаты конвертируют конструкторы для первого случая, а не для второго. Я имею в виду, что я не могу написать что-то вроде MyClass x = MyClass, и = MyClass() будет инициализацией значения, а = MyClass(args...) будет прямой инициализацией.

И даже если такая конструкция существовала, я не понимаю, почему временный MyClass объект 'конструкция' должен включать конкретно все конвертирующие конструкторы.

(И, как я вижу, x - это не то, о чем здесь говорится, потому что он определенно построен на копии, а не создан по умолчанию.)

Так что, я думаю, я запутался с условиями здесь

Ответы [ 2 ]

0 голосов
/ 07 мая 2018

Эта формулировка добавлена ​​в статью P0398R0 , которая предназначена для описания следующего случая:

Z c = {};

для неагрегированных Z.

0 голосов
/ 07 мая 2018

Это означает, что когда вы инициализируете объект, он не создается по умолчанию, а затем копируется с использованием оператора присваивания, но всегда сразу создается из параметров, заданных при инициализации. Поэтому при использовании нотации присваивания используются только преобразования.

Пример: Учитывая класс:

class MyClass
{
    MyClass();
    MyClass(int);
};

Следующие операторы вызывают только MyClass :: MyClass (int) и не имеют конструктора по умолчанию.

MyClass obj = 10;
MyClass obj{10};
MyClass obj = {10};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...