Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Корректно ли возвращать ссылку на параметр функции
|
|||
|---|---|---|---|
|
#18+
Навеяно предыдущим топиком. Корректно ли возвращать ссылку на **ссылочный** параметр функции? Вот так: Код: plaintext 1. 2. 3. 4. 5. 6. По сути дела мы возвращаем ссылку на временную переменную. Но в данном случае константную. Это всё выглядит как баг, но ни один компилятор на моей памяти не заорал варнингами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2017, 15:35 |
|
||
|
Корректно ли возвращать ссылку на параметр функции
|
|||
|---|---|---|---|
|
#18+
Но, в общем, это может быть и корректным: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2017, 15:54 |
|
||
|
Корректно ли возвращать ссылку на параметр функции
|
|||
|---|---|---|---|
|
#18+
petravНавеяно предыдущим топиком. Корректно ли возвращать ссылку на **ссылочный** параметр функции? Вот так: Код: plaintext 1. 2. 3. 4. 5. 6. Возвращать корректно, а использовать f — нет. petravПо сути дела мы возвращаем ссылку на временную переменную.В данном коде — да. petravНо в данном случае константную.А это какую роль играет? petravЭто всё выглядит как баг, но ни один компилятор на моей памяти не заорал варнингами.И? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2017, 16:26 |
|
||
|
Корректно ли возвращать ссылку на параметр функции
|
|||
|---|---|---|---|
|
#18+
petrav, компилятор нынче умный пошёл . у foo параметр ссылка. значит должна быть где то переменная (константа) в памяти на которую эта ссылка работает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2017, 16:29 |
|
||
|
Корректно ли возвращать ссылку на параметр функции
|
|||
|---|---|---|---|
|
#18+
вЪюкомпилятор нынче умный пошёл А его использующие? Что, например, об этом можно сказать? (Кстати, там и варнинг есть. Только кривоватый.) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2017, 16:37 |
|
||
|
Корректно ли возвращать ссылку на параметр функции
|
|||
|---|---|---|---|
|
#18+
Приплюснутый, слишком умный компилятор иногда может сходить с ума. особенно если ему это разрешить (-O) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2017, 16:54 |
|
||
|
Корректно ли возвращать ссылку на параметр функции
|
|||
|---|---|---|---|
|
#18+
ПриплюснутыйВозвращать корректно, а использовать f — нет. Почему же не корректно? Удержание ссылки, так кажется это называется? Это корректно: Код: plaintext 1. 2. ПриплюснутыйА это какую роль играет? И? Да мало ли какая там роль играется. Играется, да-да. Дело тут не в ООП и не в ООА. Мы просто рассуждаем о подвохах С++. С целью повысить свою грамотность. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2017, 16:55 |
|
||
|
Корректно ли возвращать ссылку на параметр функции
|
|||
|---|---|---|---|
|
#18+
вЪю, а что компилятор сделал не так? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2017, 16:57 |
|
||
|
Корректно ли возвращать ссылку на параметр функции
|
|||
|---|---|---|---|
|
#18+
вЪюpetrav, компилятор нынче умный пошёл . у foo параметр ссылка. значит должна быть где то переменная (константа) в памяти на которую эта ссылка работает. Ну возможно. Но ассемблера я не знаю. Хотя учил его... в школе. Прости, но твоя ссылка ничего для меня не сказала. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2017, 16:58 |
|
||
|
Корректно ли возвращать ссылку на параметр функции
|
|||
|---|---|---|---|
|
#18+
petravПо сути дела мы возвращаем ссылку на временную переменную. В каком месте этого кода ты нашёл временную переменную? Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2017, 17:00 |
|
||
|
Корректно ли возвращать ссылку на параметр функции
|
|||
|---|---|---|---|
|
#18+
petravУдержание ссылки, так кажется это называется?Только оно здесь не работает. http://eel.is/c draft/class.temporary#6.9 A temporary object bound to a reference parameter in a function call persists until the completion of the full-expression containing the call. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2017, 17:03 |
|
||
|
Корректно ли возвращать ссылку на параметр функции
|
|||
|---|---|---|---|
|
#18+
ПриплюснутыйвЪю, а что компилятор сделал не так? программа должна возвращать 3 а не 0 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2017, 17:04 |
|
||
|
Корректно ли возвращать ссылку на параметр функции
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovpetravПо сути дела мы возвращаем ссылку на временную переменную. В каком месте этого кода ты нашёл временную переменную? Тут мы создаём на стеке временную переменную типа int со значением 3: Код: plaintext 1. И передаём эту переменную в функцию foo(). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2017, 17:05 |
|
||
|
Корректно ли возвращать ссылку на параметр функции
|
|||
|---|---|---|---|
|
#18+
вЪю, там UB, так что не должна. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2017, 17:06 |
|
||
|
Корректно ли возвращать ссылку на параметр функции
|
|||
|---|---|---|---|
|
#18+
Приплюснутый, там нет UB. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2017, 17:15 |
|
||
|
Корректно ли возвращать ссылку на параметр функции
|
|||
|---|---|---|---|
|
#18+
вЪютам нет UB.Голословное утверждение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2017, 17:16 |
|
||
|
Корректно ли возвращать ссылку на параметр функции
|
|||
|---|---|---|---|
|
#18+
ПриплюснутыйpetravУдержание ссылки, так кажется это называется?Только оно здесь не работает. http://eel.is/c draft/class.temporary#6.9A temporary object bound to a reference parameter in a function call persists until the completion of the full-expression containing the call. Только что сработало в Студии 2015. Если честно, я не понял твоей цитаты на англ. Если ты пояснишь... было бы круто. Но я предполагаю, что там написано: временные переменные существуют пока выполняется выражение, а выражение заканчивается точкой с запятой. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2017, 17:18 |
|
||
|
Корректно ли возвращать ссылку на параметр функции
|
|||
|---|---|---|---|
|
#18+
ПриплюснутыйвЪютам нет UB.Голословное утверждение. ты сам себе противоречишь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2017, 17:23 |
|
||
|
Корректно ли возвращать ссылку на параметр функции
|
|||
|---|---|---|---|
|
#18+
petravТолько что сработало в Студии 2015.Я писал про ситуацию из ОП-поста. При чём тут getStr? petravЕсли честно, я не понял твоей цитаты на англ. Это не поможет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2017, 17:30 |
|
||
|
Корректно ли возвращать ссылку на параметр функции
|
|||
|---|---|---|---|
|
#18+
вЪюПриплюснутыйпропущено... Голословное утверждение. ты сам себе противоречишь.Второе голословное утверждение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2017, 17:30 |
|
||
|
Корректно ли возвращать ссылку на параметр функции
|
|||
|---|---|---|---|
|
#18+
Так не сработало: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Временная переменная закончила свою жизнь после точки с запятой. Но при этом содержимое переменной s корректное. Пустая строка. Не понятно совсем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2017, 17:32 |
|
||
|
Корректно ли возвращать ссылку на параметр функции
|
|||
|---|---|---|---|
|
#18+
petravВременная переменнаяЧто такое "временная переменная"? Я знаю про временные объекты. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2017, 17:36 |
|
||
|
Корректно ли возвращать ссылку на параметр функции
|
|||
|---|---|---|---|
|
#18+
ПриплюснутыйpetravТолько что сработало в Студии 2015.Я писал про ситуацию из ОП-поста. При чём тут getStr? petravЕсли честно, я не понял твоей цитаты на англ. Это не поможет? Я понял. Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2017, 17:38 |
|
||
|
Корректно ли возвращать ссылку на параметр функции
|
|||
|---|---|---|---|
|
#18+
petravУдержание ссылки, так кажется это называется?Ладно, без цитат из стандарта (тем более, что та цитата не совсем выражает то, что нужно). Упрощённо говоря, время жизни временного объекта продлевается до времени жизни ссылки, к которой он биндится. Когда оканчивается время жизни параметров функции? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2017, 17:41 |
|
||
|
Корректно ли возвращать ссылку на параметр функции
|
|||
|---|---|---|---|
|
#18+
ПриплюснутыйpetravВременная переменнаяЧто такое "временная переменная"? Я знаю про временные объекты. Объекты и есть переменные. Согласно постановлению Страуструпа С++ разрабатывался так что бы, по возможности, стереть разницу между... впрочем, мне кажется мы спорим о терминах. Путь будут объекты. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2017, 17:42 |
|
||
|
Корректно ли возвращать ссылку на параметр функции
|
|||
|---|---|---|---|
|
#18+
petravОбъекты и есть переменные. Мне из их описаний ( http://eel.is/c draft/intro.object#def:object , http://eel.is/c draft/basic#def:variable ) это не очевидно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2017, 17:47 |
|
||
|
Корректно ли возвращать ссылку на параметр функции
|
|||
|---|---|---|---|
|
#18+
ПриплюснутыйpetravУдержание ссылки, так кажется это называется?Ладно, без цитат из стандарта (тем более, что та цитата не совсем выражает то, что нужно). Упрощённо говоря, время жизни временного объекта продлевается до времени жизни ссылки, к которой он биндится. Когда оканчивается время жизни параметров функции? Время их жизни заканчивается когда мы выходим из функции. Да я понял. Соответственно если мы вернём ссылку на временный объект порождённый для параметра функции, то со всеми отягчающими... Осталось понять почему в моём последнем примере строка в корректном состоянии. Деструктор занулил указатель, длину строки и зарезервированный размер? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2017, 17:51 |
|
||
|
Корректно ли возвращать ссылку на параметр функции
|
|||
|---|---|---|---|
|
#18+
petravТут мы создаём на стеке временную переменную типа int со значением 3: Не создаём мы её на стеке. Тут есть константа в сегменте кода, ссылка на которую и передаётся в функцию. Без оптимизации GCC не выдаёт предупреждений и программа возвращает 3. С оптимизацией она возвращает 0 и компилятор честно предупреждение Код: sql 1. 2. 3. 4. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2017, 18:08 |
|
||
|
Корректно ли возвращать ссылку на параметр функции
|
|||
|---|---|---|---|
|
#18+
Приплюснутый, Спасибо. Я всё понял. Я что-то затупил, ведь всё было очевидно. Но очевидно часто становится когда носом ткнут. Непонятно только почему объект s пустой. Но это, наверное, неважно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2017, 18:09 |
|
||
|
Корректно ли возвращать ссылку на параметр функции
|
|||
|---|---|---|---|
|
#18+
petravВремя их жизни заканчивается когда мы выходим из функции.Ага. Так что с этой точки зрения та цитата из стандарта продлевает время жизни временного объекта до окончания вычисления полного выражения. Впрочем, для ответа на вопрос о корректности использования переменной f эта цитата полезна сама по себе. petravОсталось понять почему в моём последнем примере строка в корректном состоянии.Не знаю, что такое "корректное состояние" для подохших объектов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2017, 18:11 |
|
||
|
Корректно ли возвращать ссылку на параметр функции
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovpetravТут мы создаём на стеке временную переменную типа int со значением 3: Не создаём мы её на стеке.Не люблю обсуждать детали реализации, когда это не нужно для рассуждения о поведении программы, но всё же ассемблерный листинг указывает на выделение места на стеке. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2017, 18:16 |
|
||
|
Корректно ли возвращать ссылку на параметр функции
|
|||
|---|---|---|---|
|
#18+
Приплюснутыйассемблерный листинг указывает на выделение места на стеке. Да, ты прав. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2017, 18:46 |
|
||
|
Корректно ли возвращать ссылку на параметр функции
|
|||
|---|---|---|---|
|
#18+
petravПриплюснутыйпропущено... Ладно, без цитат из стандарта (тем более, что та цитата не совсем выражает то, что нужно). Упрощённо говоря, время жизни временного объекта продлевается до времени жизни ссылки, к которой он биндится. Когда оканчивается время жизни параметров функции? Время их жизни заканчивается когда мы выходим из функции. Да я понял. Соответственно если мы вернём ссылку на временный объект порождённый для параметра функции, то со всеми отягчающими... Осталось понять почему в моём последнем примере строка в корректном состоянии. Деструктор занулил указатель, длину строки и зарезервированный размер? в соответствии с С++ 15.2.6 + RVO ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2017, 21:01 |
|
||
|
Корректно ли возвращать ссылку на параметр функции
|
|||
|---|---|---|---|
|
#18+
вЪюв соответствии с С++ 15.2.6 + RVOНикакого там (N)RVO нет и быть не может. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2017, 21:13 |
|
||
|
Корректно ли возвращать ссылку на параметр функции
|
|||
|---|---|---|---|
|
#18+
petravПриплюснутыйпропущено... Ладно, без цитат из стандарта (тем более, что та цитата не совсем выражает то, что нужно). Упрощённо говоря, время жизни временного объекта продлевается до времени жизни ссылки, к которой он биндится. Когда оканчивается время жизни параметров функции? Время их жизни заканчивается когда мы выходим из функции. Да я понял. Соответственно если мы вернём ссылку на временный объект порождённый для параметра функции, то со всеми отягчающими... Осталось понять почему в моём последнем примере строка в корректном состоянии. Деструктор занулил указатель, длину строки и зарезервированный размер? Без оптимизации работает как бы ты хотел - 123. Объект временный создан, удален. Но данные то на месте. Оптимизация убирает _совсем_ временный объект, и нечего возвращать) Просто строка с нулевыми всеми структурами интерпретируется как пустая. Явное УБ. Не надо так делать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2017, 21:39 |
|
||
|
|

start [/forum/topic.php?all=1&fid=57&tid=2018057]: |
0ms |
get settings: |
9ms |
get forum list: |
11ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
164ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
60ms |
get tp. blocked users: |
1ms |
| others: | 288ms |
| total: | 555ms |

| 0 / 0 |
