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

Код: 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
28.10.2013, 22:09
    #38444193
Mozok
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
const bool &ref на const bool Func();
goodbenyaВозник вопрос такого рода. Есть метод который возвращает локальную переменную(знаю зло).
...
Однако если мы напишем так
const bool &ref = Func();
то в стандарте говориться что временная переменная будет жить, пока будет жить ссылка.

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

Дайте, пожалуйста, ссылку на соответствующий пункт стандарта.
Вы от него хотите ссылку на prolongation of temporary object by const reference или на то что возвращать локальную переменную это зло? :)
...
Рейтинг: 0 / 0
29.10.2013, 01:40
    #38444322
Anatoly Moskovsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
const bool &ref на const bool Func();
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
29.10.2013, 11:03
    #38444592
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
const bool &ref на const bool Func();
goodbenya,

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

Но возврат ссылки на локальную переменную в любом случае невалиден, константная ссылка или нет -- всё равно.
...
Рейтинг: 0 / 0
29.10.2013, 15:06
    #38445190
goodbenya
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
const bool &ref на const bool Func();
Спасибо большое . Теперь понял
...
Рейтинг: 0 / 0
29.10.2013, 16:38
    #38445430
const bool &ref на const bool Func();
Если коротко то делай так:
Код: 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
29.10.2013, 21:45
    #38445866
Mozok
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
const bool &ref на const bool Func();
prolongation of temporary objectВы от него хотите ссылку на prolongation of temporary object by const reference или на то что возвращать локальную переменную это зло? :)
Anatoly Moskovsky уже полностью ответил на мой вопрос.
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / const bool &ref на const bool Func(); / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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