Вопрос по C++

Здесь обсуждаются темы, косвенно связанные с Far.
Post Reply
Shmuel
Posts: 6834
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 530 times

Вопрос по C++

Post by Shmuel »

Code: Select all

std::string GetName(int);
const std::string& Name1 = GetName(1);
// use Name1
Вопрос: является ли в данном примере использование reference корректным, не может ли строка, на которую указывает Name1 быть удалена преждевременно?

В исходниках Far2L немало подобных мест, но вроде не падает.
(Ответы на любом языке приветствуются :)
User avatar
HaRT
Moderator
Posts: 10858
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 221 times
Been thanked: 358 times

Вопрос по C++

Post by HaRT »

Shmuel wrote: Mon 07 Nov, 2022 19:08 является ли в данном примере использование reference корректным
Да, в данном примере всё в порядке. Дело в том, что ссылка константная, и поэтому время жизни временного объекта, возвращённого функцией, продлевается, чтобы оно было не меньше, чем у самой ссылки.
Вот если бы ссылка была неконстантная, тогда получили бы классический пример неопределённого поведения (undefined behavior) из-за висячей ссылки (dangling reference).
Фар есть инструмент, а не нянька. © 2009 DrKnS
Shmuel
Posts: 6834
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 530 times

Вопрос по C++

Post by Shmuel »

HaRT, насколько я понимаю, ваше объяснение опирается на стандарт C++, ибо оно (видимо, верное), для меня не очевидно.
User avatar
HaRT
Moderator
Posts: 10858
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 221 times
Been thanked: 358 times

Вопрос по C++

Post by HaRT »

Shmuel wrote: Mon 07 Nov, 2022 19:23 ваше объяснение опирается на стандарт C++
Да, разумеется. Но не только на стандарт, но и на многолетнее применение именно такой идиомы (константная ссылка на возвращаемое значение). Это одна из практически важных частностей в C++, каких в нём очень много.
Фар есть инструмент, а не нянька. © 2009 DrKnS
Post Reply

Return to “Операционные системы, командные оболочки и прочее”