首页 > 解决方案 > C++ 标准:是否有结果对象?

问题描述

int foo() { return 0; }
int x = foo() + 1;

表示foo()函数调用表达式没有结果对象:

用于计算内置运算符的操作数的值的非丢弃纯右值或类型为 cv void 的纯右值没有结果对象

我是这样读的:(一个未丢弃的纯右值,用于计算内置运算符的操作数的值)或(一个 cv void 类型的纯右值)没有结果对象。第一个案例是我们的。

另一方面,谈到了函数调用的结果对象:

return 语句通过操作数的复制初始化来初始化(显式或隐式)函数调用的泛左值结果或纯右值结果对象

我是这样读的:return 语句通过操作数的复制初始化来初始化 ... 函数调用的 (glvalue result) 或 (prvalue result object)。第二种情况是我们的。

那么到底return 0;初始化什么呢?也许,这意味着从这里开始的临时正在初始化?

标签: c++language-lawyer

解决方案


我相信这是一个缺陷。修正可以如下:

return 语句通过操作数的复制初始化来初始化(显式或隐式)函数调用的泛左值结果或纯右值结果

prvalue 函数调用不能有结果对象。如果返回类型不是cv,它总是有结果 void


推荐阅读