Значения и временные объекты в FCD - PullRequest
5 голосов
/ 09 июня 2010

Мне потребовалось довольно много времени, чтобы понять разницу между значением и временным объектом. Но теперь окончательный проект комитета на странице 75 гласит:

Значение r * [...] является значением x, временным объектом или его подобъектом или значением, которое не связано с объектом.

Я не могу поверить своим глазам. Это должно быть ошибкой, верно?


Чтобы уточнить, вот как я понимаю термины:

#include <string>

void foo(std::string&& str)
{
    std::cout << str << std::endl;
}

int main()
{
    foo(std::string("hello"));
}

В этой программе есть два выражения , которые обозначают один и тот же временный объект : значение std::string("hello") и значение str. Выражения не являются объектами, но их оценка может дать один. В частности, оценка prvalue дает временный объект, но prvalue НЕ является временным объектом. Кто-нибудь согласен со мной или я сошел с ума? :)

Ответы [ 2 ]

2 голосов
/ 12 июня 2010

Да, я согласен с вами. По моему мнению, это должно быть исправлено, и несколько человек, которых я глубоко уважаю, подняли один и тот же вопрос по этому поводу.

0 голосов
/ 28 июня 2012

Это не так сложно, как кажется.Я имею в виду окончательно утвержденный стандарт ISO / IEC 14882-2011.Страница 78 говорит:

Значение x (значение «eXpiring») также относится к объекту, обычно ближе к концу его времени жизни (так, например, его ресурсы могут быть перемещены). xvalue является результатом некоторых видов выражений, включающих ссылки на rvalue (8.3.2).

Выделенный выше жирный шрифт был добавлен мной.Далее в стандарте говорится:

Значение r (исторически так называемое значение r, поскольку значения могут появляться в правой части выражения присваивания) - это значение x, временный объект (12.2) или подобъект егоили значение, которое не связано с объектом.

Таким образом, вы получаете значение xvalue только тогда, когда играете с «определенными видами выражений, включающими ссылки на rvalue».В противном случае ваши временные объекты - это просто временные объекты.

...