【发布时间】:2018-02-04 08:51:54
【问题描述】:
考虑以下代码:
#include <iostream>
using namespace std;
class X
{
int i;
public:
X(int ii = 0);
};
X::X(int ii) { i = ii; }
int a;
X f1() { return X(); }
int f2() { return a; }
int main() {
f1() = X(1);
f2() = 3;
}
如果你尝试运行它,你会得到
错误:需要左值作为赋值的左操作数
因此在第 17 行
f1()
被认为是左值,而
f2()
不是。对事物的运作方式有很大帮助的解释。
【问题讨论】:
-
f1() 不是左值,因为 f1 返回一个副本。阅读en.cppreference.com/w/cpp/language/value_category 获取移动信息。
-
我希望你能清楚为什么你不能分配给临时的
int,如果不是,我会为此添加另一个骗局。 -
@Baum mit Augen 我没事。谢谢。
标签: c++ function class variable-assignment lvalue