Сообщение Re[98]: Когда это наконец станет defined behavior? от 21.08.2023 20:33
Изменено 21.08.2023 21:30 vdimas
Re[98]: Когда это наконец станет defined behavior?
Здравствуйте, σ, Вы писали:
σ>>>1. При NRVO, переменная result внутри функции и someDictionary вне — обозначают один и тот же объект?
V>>Не одновременно, и этого достаточно.
σ>Чё ты цепляешься за это "не одновременно" как за соломинку?
Не-не-не, это ты пытаешься съехать, мол, "это не я накосячил, это так прописано в стандарте".
В стандарте для UB надо пытаться изменять константный объект, а для этого надо каким-либо образом реинтерпретировать объект или его память как неконстантную.
σ>"Не одновременно" это ты про то, что инициализируемая константная переменная вне области видимости тела функции? Тоже мне, проблема:
σ>
"Проблема" никуда не делась — после выхода из f переменной s более не существует, а переменная t только появляется через вызов конструктора копирования.
V>>Ты бы оперировал полностью подробностями:
σ>Ты подробностями называешь детали реализации?
Детали RVO
σ>Нахер ими вообще оперировать, рассуждая о семантике C++, можешь объяснить сперва?
О чём тебе и говорилось изначально — ты можешь рассматривать свой код как будто в нём нет никакого RVO. ))
σ>Семантика C++ не зависит от того, подготавливается там область памяти, или область хуямяти, или программа с бумажкой и карандашом интерпретируется.
Верно, но с одной оговоркой про побочные эффекты в конструкторах/деструкторах.
И об этих пообочных эффектах в стандарте говорится прямо — дабы ты не прозевал подробности. ))
А так-то да, можно договориться до чего угодно, если лезть "унутре", ведь при вызове банальных переопределённых виртуальных ф-ий даже происходит даункаст ссылочного типа this, и ничего! Все живы! Потому что эа механика спрятана, гарантируется корректное преобразование типа (вплоть до смещения адреса при множественном наследовании) и прочие тонкости, которые не должны тебя волновать.
Так же и в случае RVO — корректность кода пострадать не должна, если не будет побочных эфффектов.
Остальные твои попытки заглянуть под капот — спекуляции чистой воды. ))
Но даже и с учётом этой попытки тебя уже тыкали в то, что ты не можешб оперировать ссылкой на константный объект, бо этой ссылки еще не существует.
σ>>>1. При NRVO, переменная result внутри функции и someDictionary вне — обозначают один и тот же объект?
V>>Не одновременно, и этого достаточно.
σ>Чё ты цепляешься за это "не одновременно" как за соломинку?
Не-не-не, это ты пытаешься съехать, мол, "это не я накосячил, это так прописано в стандарте".
В стандарте для UB надо пытаться изменять константный объект, а для этого надо каким-либо образом реинтерпретировать объект или его память как неконстантную.
σ>"Не одновременно" это ты про то, что инициализируемая константная переменная вне области видимости тела функции? Тоже мне, проблема:
σ>
struct S { int i; };
σ>S f();
σ>const S t = f();
σ>S f()
σ>{
σ> S s;
σ> s.i = 0;
σ> return s;
σ>}"Проблема" никуда не делась — после выхода из f переменной s более не существует, а переменная t только появляется через вызов конструктора копирования.
V>>Ты бы оперировал полностью подробностями:
σ>Ты подробностями называешь детали реализации?
Детали RVO
σ>Нахер ими вообще оперировать, рассуждая о семантике C++, можешь объяснить сперва?
О чём тебе и говорилось изначально — ты можешь рассматривать свой код как будто в нём нет никакого RVO. ))
σ>Семантика C++ не зависит от того, подготавливается там область памяти, или область хуямяти, или программа с бумажкой и карандашом интерпретируется.
Верно, но с одной оговоркой про побочные эффекты в конструкторах/деструкторах.
И об этих пообочных эффектах в стандарте говорится прямо — дабы ты не прозевал подробности. ))
А так-то да, можно договориться до чего угодно, если лезть "унутре", ведь при вызове банальных переопределённых виртуальных ф-ий даже происходит даункаст ссылочного типа this, и ничего! Все живы! Потому что эа механика спрятана, гарантируется корректное преобразование типа (вплоть до смещения адреса при множественном наследовании) и прочие тонкости, которые не должны тебя волновать.
Так же и в случае RVO — корректность кода пострадать не должна, если не будет побочных эфффектов.
Остальные твои попытки заглянуть под капот — спекуляции чистой воды. ))
Но даже и с учётом этой попытки тебя уже тыкали в то, что ты не можешб оперировать ссылкой на константный объект, бо этой ссылки еще не существует.
Re[98]: Когда это наконец станет defined behavior?
Здравствуйте, σ, Вы писали:
σ>>>1. При NRVO, переменная result внутри функции и someDictionary вне — обозначают один и тот же объект?
V>>Не одновременно, и этого достаточно.
σ>Чё ты цепляешься за это "не одновременно" как за соломинку?
Не-не-не, это ты пытаешься съехать, мол, "это не я накосячил, это так прописано в стандарте".
В стандарте для UB надо пытаться изменять константный объект, а для этого надо каким-либо образом реинтерпретировать объект или его память как неконстантную.
σ>"Не одновременно" это ты про то, что инициализируемая константная переменная вне области видимости тела функции? Тоже мне, проблема:
σ>
"Проблема" никуда не делась — после выхода из f переменной s более не существует, а переменная t только появляется через вызов конструктора копирования.
V>>Ты бы оперировал полностью подробностями:
σ>Ты подробностями называешь детали реализации?
Детали RVO
σ>Нахер ими вообще оперировать, рассуждая о семантике C++, можешь объяснить сперва?
О чём тебе и говорилось изначально — ты можешь рассматривать свой код как будто в нём нет никакого RVO. ))
σ>Семантика C++ не зависит от того, подготавливается там область памяти, или область хуямяти, или программа с бумажкой и карандашом интерпретируется.
Верно, но с одной оговоркой про побочные эффекты в конструкторах/деструкторах.
И об этих пообочных эффектах в стандарте говорится прямо — дабы ты не прозевал подробности. ))
А так-то да, можно договориться до чего угодно, если лезть "унутре", ведь при вызове банальных переопределённых виртуальных ф-ий даже происходит даункаст ссылочного типа this, и ничего! Все живы! Потому что эа механика спрятана, гарантируется корректное преобразование типа (вплоть до смещения адреса при множественном наследовании) и прочие тонкости, которые не должны тебя волновать.
Так же и в случае RVO — корректность кода пострадать не должна, если не будет побочных эфффектов.
Остальные твои попытки заглянуть под капот — спекуляции чистой воды. ))
Но даже и с учётом этой попытки тебя уже тыкали в то, что ты не можешь оперировать ссылкой/переменной на константный объект, бо этой ссылки еще не существует.
σ>>>1. При NRVO, переменная result внутри функции и someDictionary вне — обозначают один и тот же объект?
V>>Не одновременно, и этого достаточно.
σ>Чё ты цепляешься за это "не одновременно" как за соломинку?
Не-не-не, это ты пытаешься съехать, мол, "это не я накосячил, это так прописано в стандарте".
В стандарте для UB надо пытаться изменять константный объект, а для этого надо каким-либо образом реинтерпретировать объект или его память как неконстантную.
σ>"Не одновременно" это ты про то, что инициализируемая константная переменная вне области видимости тела функции? Тоже мне, проблема:
σ>
struct S { int i; };
σ>S f();
σ>const S t = f();
σ>S f()
σ>{
σ> S s;
σ> s.i = 0;
σ> return s;
σ>}"Проблема" никуда не делась — после выхода из f переменной s более не существует, а переменная t только появляется через вызов конструктора копирования.
V>>Ты бы оперировал полностью подробностями:
σ>Ты подробностями называешь детали реализации?
Детали RVO
σ>Нахер ими вообще оперировать, рассуждая о семантике C++, можешь объяснить сперва?
О чём тебе и говорилось изначально — ты можешь рассматривать свой код как будто в нём нет никакого RVO. ))
σ>Семантика C++ не зависит от того, подготавливается там область памяти, или область хуямяти, или программа с бумажкой и карандашом интерпретируется.
Верно, но с одной оговоркой про побочные эффекты в конструкторах/деструкторах.
И об этих пообочных эффектах в стандарте говорится прямо — дабы ты не прозевал подробности. ))
А так-то да, можно договориться до чего угодно, если лезть "унутре", ведь при вызове банальных переопределённых виртуальных ф-ий даже происходит даункаст ссылочного типа this, и ничего! Все живы! Потому что эа механика спрятана, гарантируется корректное преобразование типа (вплоть до смещения адреса при множественном наследовании) и прочие тонкости, которые не должны тебя волновать.
Так же и в случае RVO — корректность кода пострадать не должна, если не будет побочных эфффектов.
Остальные твои попытки заглянуть под капот — спекуляции чистой воды. ))
Но даже и с учётом этой попытки тебя уже тыкали в то, что ты не можешь оперировать ссылкой/переменной на константный объект, бо этой ссылки еще не существует.