Сообщение Re[99]: Когда это наконец станет defined behavior? от 22.08.2023 0:03
Изменено 22.08.2023 0:09 σ
Re[99]: Когда это наконец станет defined behavior?
σ>>И что «lifetime»? Он начинается внутри функции, после инициализации result.
BFE>Когда начинается lifetime объекта someDictionary ? Тогда, когда заканчивается конструирование объекта.
Ну. При NRVO, оно заканчивается на std::map<int, int> result;.
BFE>В выражении const std::map<int, int> someDictionary = buildMap(); вызов buildMap() sequenced before инициализации someDictionary, а значит значение для инициализации должно быть получено до начала lifetime объекта someDictionary. А до этих пор константный объект можно модифицировать.
Получается, result.insert(42, 43); — UB, т.к. после старта лайфтайма?
BFE>Когда начинается lifetime объекта someDictionary ? Тогда, когда заканчивается конструирование объекта.
Ну. При NRVO, оно заканчивается на std::map<int, int> result;.
BFE>В выражении const std::map<int, int> someDictionary = buildMap(); вызов buildMap() sequenced before инициализации someDictionary, а значит значение для инициализации должно быть получено до начала lifetime объекта someDictionary. А до этих пор константный объект можно модифицировать.
Получается, result.insert(42, 43); — UB, т.к. после старта лайфтайма?
Re[99]: Когда это наконец станет defined behavior?
σ>>И что «lifetime»? Он начинается внутри функции, после инициализации result.
BFE>Когда начинается lifetime объекта someDictionary ? Тогда, когда заканчивается конструирование объекта.
Ну. При NRVO, оно заканчивается на std::map<int, int> result;.
BFE>В выражении const std::map<int, int> someDictionary = buildMap(); вызов buildMap() sequenced before инициализации someDictionary, а значит значение для инициализации должно быть получено до начала lifetime объекта someDictionary. А до этих пор константный объект можно модифицировать.
Получается, result.insert(42, 43); — UB, т.к. после старта лайфтайма?
Или объект сначала вроде как создаётся константным (const std::map<int, int> someDictionary), но потом становится неконстантным (std::map<int, int> result;), а опять константным не становится, и его можно менять даже после const std::map<int, int> someDictionary = buildMap();?
BFE>Когда начинается lifetime объекта someDictionary ? Тогда, когда заканчивается конструирование объекта.
Ну. При NRVO, оно заканчивается на std::map<int, int> result;.
BFE>В выражении const std::map<int, int> someDictionary = buildMap(); вызов buildMap() sequenced before инициализации someDictionary, а значит значение для инициализации должно быть получено до начала lifetime объекта someDictionary. А до этих пор константный объект можно модифицировать.
Получается, result.insert(42, 43); — UB, т.к. после старта лайфтайма?
Или объект сначала вроде как создаётся константным (const std::map<int, int> someDictionary), но потом становится неконстантным (std::map<int, int> result;), а опять константным не становится, и его можно менять даже после const std::map<int, int> someDictionary = buildMap();?