C ++从类成员函数返回值

时间:2015-08-27 14:56:37

标签: c++ function class

我无法理解为什么a.funct()可以是赋值运算符的左操作数,即使funct()没有返回l值引用。

class A
{
public: 
    A funct () {A x; return x;}
};

int main () 
{
    A a,b; a.funct()=b;
}

3 个答案:

答案 0 :(得分:5)

在类的自动生成方法中,有

A& operator = (const A&);

使a.funct() = b合法。

为了禁止对rvalue的影响,你可以从C ++ 11开始编写和实现

A& operator = (const A&) &; // Note the last &

所以分配只适用于左值。

答案 1 :(得分:0)

在代码中,funct应该返回一个可以分配给的变量。

请注意funct中的代码如果通过引用返回则非常危险;一旦函数结束,局部变量x将超出范围,返回的变量将导致未定义的行为,因为它的析构函数将被调用。

答案 2 :(得分:0)

你的假设是错误的。您的代码完全有效。 试试这段代码:

#include <string>
#include <iostream>    

class A
{
    std::string m_name;
public:
    A(const std::string& name) :m_name(name) {}

    A funct() { A x("intern"); return x; }

    A& operator=(const A& a)
    {
        m_name += a.m_name;
        return *this;
    }

    void print() { std::cout << m_name << std::endl; }
};

int main()
{
    A a("A"), b("B"); (a.funct() = b).print();//prints "internB"
}