13 / 13 / 1
Регистрация: 19.10.2019
Сообщений: 607
|
||||||
1 | ||||||
Запутался с lifetime return statement c++1104.08.2021, 21:41. Показов 2058. Ответов 26
Метки нет (Все метки)
Есть в 11м стандарте такие строки:
RVO:
0
|
04.08.2021, 21:41 | |
Ответы с готовыми решениями:
26
Else return statement Запутался с return Error:(42, 5) java: missing return statement Что значит ошибка: missing return statement? |
248 / 70 / 9
Регистрация: 22.07.2018
Сообщений: 321
|
|
04.08.2021, 22:01 | 2 |
И какое отношение первая цитата имеет к коду? (ну или наоборот, код к цитате)
0
|
13 / 13 / 1
Регистрация: 19.10.2019
Сообщений: 607
|
|
04.08.2021, 22:14 [ТС] | 3 |
Временный объект A привязывается к return statement или не так ?
Добавлено через 3 минуты к return value Добавлено через 2 минуты У Саттера всё логично, но только я не вижу корреляции его слов со стандартом. https://herbsutter.com/2008/01... ant-const/
0
|
610 / 415 / 151
Регистрация: 11.01.2019
Сообщений: 1,746
|
|
04.08.2021, 22:18 | 4 |
0
|
13 / 13 / 1
Регистрация: 19.10.2019
Сообщений: 607
|
|
04.08.2021, 22:22 [ТС] | 5 |
jugu, На том основании что конструктор копирования не вызывается.
0
|
248 / 70 / 9
Регистрация: 22.07.2018
Сообщений: 321
|
|||||||||||
04.08.2021, 22:24 | 6 | ||||||||||
Первая цитата про код типа
0
|
13 / 13 / 1
Регистрация: 19.10.2019
Сообщений: 607
|
|||||||||||
04.08.2021, 22:28 [ТС] | 7 | ||||||||||
Для 11го стандарта будет или не будет определяется ключами компиляции.
Добавлено через 3 минуты argcargv, Первая цитата это вот эта: Тогда почему она только про это
0
|
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|||||||||||
04.08.2021, 22:30 | 8 | ||||||||||
код вида:
в обоих случаях ссылка продлит жизнь временного объекта. RVO просто позволяет избежать копирований/перемещений.
0
|
610 / 415 / 151
Регистрация: 11.01.2019
Сообщений: 1,746
|
|
04.08.2021, 22:31 | 9 |
Ты описал суть RVO, а не основание. Ну да ладно, я посмотрел ассемблерный код - функция пустая, RVO есть. И правило работает, т.к. оптимизация не должна нарушать семантики языка.
0
|
13 / 13 / 1
Регистрация: 19.10.2019
Сообщений: 607
|
|
04.08.2021, 22:31 [ТС] | 10 |
hoggy, Оптимизация это фишка компилятора, а не стандарта ISO. Пофиг до какого кода компилятор оптимизирует.
0
|
248 / 70 / 9
Регистрация: 22.07.2018
Сообщений: 321
|
|
04.08.2021, 22:33 | 11 |
squareroot, потому что в
A f() { return A(); } ссылки, которые могут байндиться к временным объектам, это только ссылки в конструкторе копирования/перемещения A (если не применится RVO), но это другой случай:
0
|
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|
04.08.2021, 22:33 | 12 |
как ты думаешь,
почему стандартные оптимизации RVO/NRVO называют "стандартными" ?
0
|
13 / 13 / 1
Регистрация: 19.10.2019
Сообщений: 607
|
|
04.08.2021, 22:49 [ТС] | 13 |
hoggy, Что Выспросили угадал ? Вы переводите дискуссию с правил из стандарта 11х плюсов в русло кто как чего там называет. Это не тот уровень дискуссии на который я расчитываю.
Добавлено через 10 минут argcargv, Не совсем понял какое отношение приведенная Вами цитата имеет к моему вопросу ? Смысл приведенный Вами цитаты очевиден и бесспорен. Но как она связана с остальным ? Там перечисление независмых друг от друга условий. Добавлено через 1 минуту hoggy, RVO стала частью стандарта с++17, но я спрашиваю про с++11
0
|
248 / 70 / 9
Регистрация: 22.07.2018
Сообщений: 321
|
|
04.08.2021, 22:56 | 14 |
squareroot, первый параграф это про продление времени жизни временных объектов при байндинге ссылок и исключения из этого правила.
В A f() { return A(); } ссылки будут участвовать только если не будет применено RVO и будет использоваться конструктор перемещения или копирования.В случае RVO тут вообще нет байндинга ссылок при вычислении операнда return . Так что весь параграф тут не при чём.Добавлено через 2 минуты Т.н. RVO стала частью стандарта C++98. "Guaranteed copy elision" это не "гарантированное RVO".
0
|
18829 / 9832 / 2403
Регистрация: 30.01.2014
Сообщений: 17,269
|
|
04.08.2021, 22:57 | 15 |
Какая разница, как этот временный объект получен, копированием, или другим конструктором?
Т.е. правило о привязке ссылки тут вообще не затрагивается, объект все равно будет (при привязке к ссылке в вашем коде), только с "RVO" мы его получим непосредственно, а без "RVO" с помощью копирования локального.
0
|
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|
04.08.2021, 22:59 | 16 |
нет.
ты спросил не про с++11, а про RVO: я тебе ответил как: с RVO код будет оптимизирован.
0
|
13 / 13 / 1
Регистрация: 19.10.2019
Сообщений: 607
|
|
04.08.2021, 23:04 [ТС] | 17 |
argcargv, Вроде понял я Вашу логику. Т.е. поскольку параграф про ссылки, то в контексте return statement означает возврат по ссылки. Только ссылка какая то безымянная до присваивания const A& ref.
Добавлено через 54 секунды hoggy, В названии темы специально указано что речь идет исключительно про с++11.
0
|
248 / 70 / 9
Регистрация: 22.07.2018
Сообщений: 321
|
|
04.08.2021, 23:05 | 18 |
0
|
13 / 13 / 1
Регистрация: 19.10.2019
Сообщений: 607
|
||||||
04.08.2021, 23:11 [ТС] | 19 | |||||
Так нечестно. Вы приводите код с начало без
Надо определится. Мы рассматриваем все выражение или только субвыражение.
0
|
248 / 70 / 9
Регистрация: 22.07.2018
Сообщений: 321
|
|
04.08.2021, 23:12 | 20 |
0
|
04.08.2021, 23:12 | |
04.08.2021, 23:12 | |
Помогаю со студенческими работами здесь
20
Ошибка SQL statement doesn't return rows Missing return statement при использовании тернарного оператора вместо if Выдает такую ошибку. [Error] return-statement with a value, in function returning Нюансы синтаксиса: как работают выражения вида statement = statement = statement? Namespace declaration statement has to be the very first statement or after any declare call in the script Lifetime контекста Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |