C++ - 需要左值作为赋值的左操作数

标签 c++ function class variable-assignment lvalue

<分区>

考虑以下代码:

#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;
} 

如果你尝试运行它,你会得到

error: lvalue required as left operand of assignment

因此在第 17 行

f1()

被认为是左值,而

f2()

不是。解释将对事物如何运作有很大帮助。

最佳答案

f1() is considered a lvalue

不,f1 返回的仍然是一个右值(与 f2 相同;更准确地说,它是一个 prvalue )。但是对于类类型,f1() = X(1); 只是被解释为 f1().operator=(X(1));,这很好即使它可能没有多大意义; f1() 返回的临时对象很快就会被销毁。简而言之,您可以在具有类类型的右值上调用成员函数。

另一方面,直接禁止内置类型的类似行为;分配给这样的临时工根本没有意义。这就是编译器提示它不是左值的原因。

关于C++ - 需要左值作为赋值的左操作数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45896060/

相关文章:

C++:调用了错误的析构函数

构造函数中的 C++ 类型特征导致错误

function - 将 DateTime 作为参数传递

c++ - 指向节点的指针不更新节点属性

python - 选择除 BeautifulSoup 中具有某些类的所有 div

c++ - 在 std::map 中存储局部变量

C++ 用数组简单计算分数

javascript - React 中是否可以访问组件外部的函数?

java - 父类(super class)类型对象的子类的构造方法?

C++ CGI脚本,读取表单数据