powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / const bool &ref на const bool Func();
8 сообщений из 8, страница 1 из 1
const bool &ref на const bool Func();
    #38444139
goodbenya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Возник вопрос такого рода. Есть метод который возвращает локальную переменную(знаю зло). Однако

Код: plaintext
1.
2.
3.
4.
5.
bool& Func()
{
	bool f = false;
	return f;
}



если мы напишем так тогда
bool &ref = Func();
Тогда при первом перераспределении памяти на стеке ссылка будет не валидна. Однако если мы напишем так
const bool &ref = Func();
то в стандарте говориться что временная переменная будет жить, пока будет жить ссылка.
А теперь сам вопрос если сделать метод константным

Код: plaintext
1.
2.
3.
4.
5.
const bool& Func()
{
	bool f = false;
	return f;
}


мы сможем сделать на него ссылку только константную
const bool& ref = F();
и временная переменная будет жить столько же сколько ссылка.
а как эта функция может повести себя в таком условии

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
if(Func())
{
     Правда.
}
else
{
     Лож.
}


Может выдать мусор ?
...
Рейтинг: 0 / 0
const bool &ref на const bool Func();
    #38444193
Mozok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
goodbenyaВозник вопрос такого рода. Есть метод который возвращает локальную переменную(знаю зло).
...
Однако если мы напишем так
const bool &ref = Func();
то в стандарте говориться что временная переменная будет жить, пока будет жить ссылка.

Дайте, пожалуйста, ссылку на соответствующий пункт стандарта.
...
Рейтинг: 0 / 0
const bool &ref на const bool Func();
    #38444205
MozokgoodbenyaВозник вопрос такого рода. Есть метод который возвращает локальную переменную(знаю зло).
...
Однако если мы напишем так
const bool &ref = Func();
то в стандарте говориться что временная переменная будет жить, пока будет жить ссылка.

Дайте, пожалуйста, ссылку на соответствующий пункт стандарта.
Вы от него хотите ссылку на prolongation of temporary object by const reference или на то что возвращать локальную переменную это зло? :)
...
Рейтинг: 0 / 0
const bool &ref на const bool Func();
    #38444322
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
goodbenyaЕсть метод который возвращает локальную переменную(знаю зло)
...
const bool &ref = Func();
то в стандарте говориться что временная переменная будет жить, пока будет жить ссылка.
Как-то вы слишком легко перескочили от локальных переменных в вашем коде к временным переменным в стандарте
А ведь это вообще концептуально разные вещи.

Если говорить конкретно то код
Код: plaintext
1.
const bool &ref = Func(); 


внутри выглядит так:
Код: plaintext
1.
2.
const bool& temp = Func(); 
const bool& ref = temp; 


Таким образом, говоря строгим научным языком, языку С++ по барабану во что вы сохраняете ссылку на локальную переменную возвращенную из функции.
Там по-любому уже мусор.

А стандарт говорить про другую ситуацию, когда функция возвращает значение (а не ссылку), а оно присваивается в ссылку. Тогда код созданный компилятором будет таким:
Код: plaintext
1.
2.
const bool temp = Func(); 
const bool& ref = temp;  


и temp уничтожится только после того как ref выйдет из области видимости.
...
Рейтинг: 0 / 0
const bool &ref на const bool Func();
    #38444592
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
goodbenya,

Ты не сделал метод константным. Ты сделал константным тип возврата.

Но возврат ссылки на локальную переменную в любом случае невалиден, константная ссылка или нет -- всё равно.
...
Рейтинг: 0 / 0
const bool &ref на const bool Func();
    #38445190
goodbenya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо большое . Теперь понял
...
Рейтинг: 0 / 0
const bool &ref на const bool Func();
    #38445430
Если коротко то делай так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
bool Func()
{
	bool f = false;
	return f;
}

int main () {
 bool const& ref = Func();
 return 0;
}
...
Рейтинг: 0 / 0
const bool &ref на const bool Func();
    #38445866
Mozok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
prolongation of temporary objectВы от него хотите ссылку на prolongation of temporary object by const reference или на то что возвращать локальную переменную это зло? :)
Anatoly Moskovsky уже полностью ответил на мой вопрос.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / const bool &ref на const bool Func();
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]