/* Класс реализующий комплексное число */
class Complex{
...
Complex(float re, float im);
...
};
class Test{
Complex a;
public:
Test():a(3,-2){}
};
Встретил ответ, что используются lvalue, инициированные rvalue. Его нельзя счесть за правильный, разве что сделать кучу оговорок.
int a(1);
++a = 5;
++a это lvalue, так как префиксная операция инкремента возвращает ссылку на объект. Но это не инициализация, и мы не сможем добавить ++a в список инициализации. Но если вы видите, что lvalue инициируется rvalue (int a(1)), то такое можно добавить в список. И можно ли сказать, что a(3,-2) это lvalue инициированное rvalue?Поэтому, я считаю, правильный ответ: в качестве инициализирующих выражений используются явные вызовы конструкторов.
Добрый день. Возможно, имеется в виду std::initializer_list?
ОтветитьУдалить