[C++] Ссылка на несконструированный обьект
Имхо, вполне валидной.
С другой стороны, при реализации ссылок указателями ничто не мешает ей стать валидной после работы к-тора
Может ли ссылка из невалидной стать валидной?
Ну да, работать с объектом, доступным по ней можно будет только после выполнения конструктора.
При этом, обрати внимание, память на объект уже будет выделена и ошибки не произойдет при обращении по ссылке. Просто будут использоваться неиницализированные данные.
А где гарантии, что память уже будет выделена? Каким пунктом компилятору запрещено вызвать конструктор vermilion_street.first_brother до выделения памяти под vermilion_street.second_brother?
Очень странно было бы, если бы это было не так, имхо. Пункт не знаю, надо смотреть стандарт
3.7.4. Duration of sub-objects
The storage duration of member subobjects, base class subobjects and array elements is that of their complete object.
class A {
A{printf("A;\n");}
A(const A& a){printf("A(A a);\n");}
~A{printf("~A;\n");}
}
A a(a);
Output:
A(A a)
~A
бред какой-то.
VC++ в строчке A a(_a_); переменную a ещё не считает объявленной, а mingw считает.
А какому пункту стандарта это противоречит ?
Как по-твоему я должен клонировать неинициализированный объект?
ЗЫ буду теперь писать private: A(const A& obj);
private: A& operator=(const A& obj);
3.3.1/1 говорит, что это не баг, «a» уже объявлен на момент его инициализации.
ок, это не бага, это фича.
Нет, все же бага. VC++
int a = a;
?
См. 3.3.1. Этот код там в качестве примера
И точно
Я худею.
Оставить комментарий
zzzzzzzzzzz
Что-то не могу найти в стандарте ответ на вопрос: будет ли валидной ссылка vermilion_street.first_brother.hommie?Вроде как нет, но почему?