Здравствуйте, гость ( Вход | Регистрация )
lanz | Дата 31.8.2017, 10:34 |
Цитата А ты опустил байндинг аргумента оператора= this? он конвертируется в xvalue до байндинга, так что это тут не причем "world"? а что необычного в байндинге const char* ? Превращение prvalue в xvalue имеет непосредственное отношение к сути вопроса и объясняет механизм, поэтому я его и описал, байндинг аргументов не имеет к ней отношения. Если считаете обратное, разверните свою точку зрения более подробно. Алексей1153 все в целом верно описал, кроме того что из функции возвращается не временное значение, а prvalue, о чем спрашивал ТС Цитата мы же rvalue значение присваиваем, а это нельзя вроде? Поэтому я и посчитал возможным рассказать о механизме temporary materialization. Цитата хех, нашли, о чём спорить https://imgs.xkcd.com/comics/duty_calls.png |
|
Алексей1153 | Дата 31.8.2017, 7:34 |
хех, нашли, о чём спорить | |
Гест | Дата 30.8.2017, 19:40 |
Цитата Что он описал неверно? Пропустил превращение prvalue в xvalue, я же все описал. А ты опустил байндинг аргумента оператора= |
|
lanz | Дата 30.8.2017, 16:21 |
Цитата Что он описал неверно? Пропустил превращение prvalue в xvalue, я же все описал. |
|
Гест | Дата 29.8.2017, 15:20 |
Не совсем Что он описал неверно? |
|
lanz | Дата 4.6.2017, 1:26 |
"работает" это так Не совсем Вот так не скомпилируется:
мы же rvalue значение присваиваем, а это нельзя вроде? Это верно, но не совсем, т.к. возвращается объект класса std::string, то assignment превращается в вызов member function и prvalue превращается в xvalue. Называется temporary materialization. http://en.cppreference.com/w/cpp/language/...materialization |
|
Алексей1153 | Дата 3.6.2017, 20:22 |
"работает" это так 1) getStr() возвращает объект класса std::string (безымянный, но назовём его, скажем, S). S содержит значение "hello" 2) вызывается оператор = объекта S , присваивается значение "Wolrd" 3) (getStr() = "Wolrd") возвращает ссылку на S 4) S выводится в поток |
|
Quester | Дата 3.6.2017, 13:07 |
в том виде, как ты написал, это не работает. если хочешь присваивать результат значению, возвзащаемому из функции, результат должен иметь тип lvalue, то есть, возвращаться по ссылке. типичное применение возврата ссылки - operator[]. Если написать так, то работает-
, напишет "World". Просто не понятно, как компилируется, мы же rvalue значение присваиваем, а это нельзя вроде? Спасибо за ответ!!! |
|
Iron Bug | Дата 2.6.2017, 21:34 |
в том виде, как ты написал, это не работает. если хочешь присваивать результат значению, возвращаемому из функции, результат должен иметь тип lvalue, то есть, возвращаться по ссылке. типичное применение возврата ссылки - operator[]. |
|
Quester | Дата 2.6.2017, 20:37 |
Добрый вечер, ребята! Объясните пожалуйста, как такое работает:
Из функции "getStr()" вернется временная переменная, скажите пожалуйста, разве можно изменять значение временной переменной? И насколько это корректно?? Спасибо!!! |
|
Просмотр темы полностью (откроется в новом окне) | |
Текстовая версия | Сейчас: 29.3.2024, 15:53 |