Рассмотрим приведенный ниже код:
#include <iostream>
int func(){
int a = 0;
return a;
}
int main(){
int result = func();
}
В соответствии со стандартом cpp некоторые правила для оператора return:
- Функция возвращается к своему вызывающий оператор return.
- [...] оператор return инициализирует результат glvalue или объект результата prvalue (явного или неявного) вызова функции путем copy-initialization из операнда
Итак, вызов для int result = func();
, как если бы он мог быть переведен в:
//a fiction code
func(){
int a = 0;
int result = a; #1
}
Поскольку a
является glvalue, его следует преобразовать prvalue для оценки prvalue (инициализация объекта). Таким образом, мой вопрос заключается в том, что при вызове int result = func();
в теле func
необходимо ли преобразовать glvalue a
, который в качестве операнда return
необходимо преобразовать в prvalue?