crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

> Изменение значения возвращаемого из функции
Гость_Quester_*
сообщение 2.6.2017, 20:37
Сообщение #1





Гости








    


Добрый вечер, ребята! Объясните пожалуйста, как такое работает:

...
std::string getStr(){
   reutrn "hello";
}

int main(){

   getStr() = "World!";
...


Из функции "getStr()" вернется временная переменная, скажите пожалуйста, разве можно изменять значение временной переменной? И насколько это корректно??

Спасибо!!!
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
lanz
  опции профиля:
сообщение 4.6.2017, 1:26
Сообщение #2


Старейший участник
****

Группа: Участник
Сообщений: 690
Регистрация: 28.12.2012
Пользователь №: 3660

Спасибо сказали: 113 раз(а)




Репутация:   8  


Цитата(Алексей1153 @ 3.6.2017, 20:22) *
"работает" это так

Не совсем :)
Вот так не скомпилируется:
int getInt() {
  return 42;
}

int main(int argc, char **argv) {
  getInt() = 15;
}


Цитата(Гость_Quester_* @ 3.6.2017, 13:07) *
мы же rvalue значение присваиваем, а это нельзя вроде?

Это верно, но не совсем, т.к. возвращается объект класса std::string, то assignment превращается в вызов member function и prvalue превращается в xvalue.
Называется temporary materialization.
http://en.cppreference.com/w/cpp/language/...materialization

Сообщение отредактировал lanz - 4.6.2017, 1:28
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 27.4.2024, 16:50