выражение как результат вызова функции в C ++ - PullRequest
1 голос
/ 01 августа 2020

Как результат вызова функции может быть выражением? Я читаю эту статью - http://eel.is/c++draft/expr, и там написано, что

Выражение - это значение x, если оно является результатом вызова функции, явным или неявным, чей возвращаемый тип является ссылкой rvalue на тип объекта

Я не понимаю, как выражение может быть результатом вызова функции.

1 Ответ

1 голос
/ 01 августа 2020

Рассмотрим эти два примера.

const auto someValue = 43 * otherValue;
const auto someOther = func();

В обоих случаях правая часть присваиваемого является выражением. В первом случае это целочисленное умножение. Во втором вызове это вызов функции. Давайте будем максимально ясны: выражение не является результатом вызова функции - вместо этого func() является выражением.

Представьте себе сигнатуру этого вызова функции

struct Obj { /* ... */ };

Obj&& func();

Здесь возвращаемый тип - это ссылка rvalue типа объекта. Это подразумевается формулировкой в ​​стандарте. И в приведенном выше случае выражение func() является xvalue («eXpiring value»).

...