В настоящее время я пишу дипломную работу, и она также включает в себя некоторое объяснение теории, лежащей в основе C ++ 11, что действительно хорошо, так как C ++ - мой предпочтительный язык программирования, и стандарт более или менее доступен бесплатно (N3337) дляокунитесь в себя.
И все же я врезался в стену, пытаясь точно и подробно объяснить новую категорию xvalue. Насколько я понимаю, временный объект всегда является xvalue, но я не могу найти ссылку на это в стандарте. Насколько я понимаю, категория значений выражения вызова функции для функции, которая имеетвозвращаемый тип без ссылки, это xvalue.Стандарт говорит, что «xvalue - это результат определенного вида выражений, которые включают в себя rvalue-ссылки», что вызывает у меня проблемы.Например:
TestClass { ... };
testClass createObject() { return testClass(); }
void someFunction(TestClass& testClass) { ... }
void someFunction(TestClass&& testClass) { ... }
someFunction(createObject());
Вышеуказанное, как и ожидалось, вызовет перегруженную функцию, которая принимает ссылку-значение в качестве параметра.Однако createObject () не возвращает ссылку на rvalue, он возвращает временный объект типа TestClass.Моя проблема сейчас, я должен объяснить причины этого.Что оценивает выражение «createObject ()»?Если это действительно значение xvalue, потому что оно возвращает временный объект, его причина ясна, а ссылка на rvalue предпочтительна при разрешении перегрузки.Если это не так, каково объяснение этого поведения в отношении стандарта?Есть ли какая-то неявная логика преобразования, определенная где-то, которую я еще не нашел?
Я был бы очень признателен, если бы кто-нибудь мог мне помочь с этим, потому что даже после нескольких дней копания и чтения я еще не пришелсо звуковым объяснением.Заранее большое спасибо.