c ++:在函数返回期间,“在值中捕获引用”与“捕获值的价值”有什么不同?

时间:2018-03-13 03:56:01

标签: c++ c++11 operator-overloading return-by-reference return-by-value

在1& 2内部,当我们通过返回参考分配?

Class A
{
    A& operator= (const A &ax)
    {
        return *this;
    }
}
int main()
{
    A a;
    A b;
    b = a; // -------------- 1
    A c = a;  // ----------- 2
}

// ---------------------------------------------------------------

下面会有什么区别(指定的返回值)? :

Class A
{
    A operator= (const A &ax)
    {
        return *this;
    }
}
int main()
{
    A a;
    A b;
    b = a; // -------------- 3
    A c = a;  // ----------- 4
}

1 个答案:

答案 0 :(得分:0)

还存在一个主要错误,因为public:设置为私有且代码格式不正确,但可以通过添加operator=访问修饰符来解决此问题。

从存储到b变量的对象调用

#include <iostream> class A { public: float a1; A& operator= (const A &ax) { return *this; } }; int main() { A a; a.a1 = 3; A b; b.a1 = 5; b = a; // -------------- 1 std::cout << b.a1; // outputs 5 A c = a; std::cout << c.a1; // outputs 3 } ,因此这种赋值变体根本不应执行赋值。

A c = a;

该行

operator=

被称为初始化,不使用this,而是使用(由编译器生成)复制构造函数,它执行对象的浅表副本。

你的错误是成员运算符=意味着将其参数的值赋给operator=a=b=c;返回分配结果,可用于链接:A& A::operator= (const A &right)

A& operator= (A &left, const A &right)

相当于

git cherry-pick