折叠表达式总是prvalue吗?它是否正确?
template<typename... Args>
auto sum(Args... args) {
auto fold = (... + args);
return fold;
}
int main() {
sum(10, 2, 2);
}
Run Code Online (Sandbox Code Playgroud)
我真的只对(... + args)上面例子中的fold表达感兴趣.
fold-expression具有与简单地写出运算符的N-1个应用程序相同的语义(其中N是包中元素的数量).例如,sum(10, 2, 2)将产生(10 + 2) + 2.见[temp.variadic]/9.
一般来说,这可能是也可能不是prvalue.折叠2个或更多数值+将始终产生prvalue,因为内置+运算符产生prvalue,但如果包中只有一个元素args,则(... + args)意味着只需通过其假设名称提及一个元素,结果将是一个左值.当然,您也可以使用其他(可能是重载的)运算符进行折叠,这可能会产生glvalues.