VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
楼主: 格里弗斯

引用与连续赋值问题,多谢!

[复制链接]

2

主题

54

帖子

34.00

积分

新手上路

Rank: 1

积分
34.00
发表于 2020-1-5 08:21:01 | 显示全部楼层
对于a=b=c这种形式,返回值和引用的都可以
对于(a=b)=c这种形式,当然返回对象不可以的,从另一个角度
也可以说明,因为返回值创建个临时对象,而临时对象在
C++都是const的,对一const量赋值不可以的,也可以这么理解
在《effective C++》item15给出了详细的解释,综合各种使用情况,对于=无其它的选择,
返回引用,
针对个别的情况的话,你可以用某些的形式返对象之类,一步一步分析,都可以得出结论
回复

使用道具 举报

2

主题

54

帖子

34.00

积分

新手上路

Rank: 1

积分
34.00
发表于 2020-1-5 08:39:01 | 显示全部楼层
(a=b)=c
====
这种形式,对于返回如果不是引用的话,c的值不会赋给a和b中任一个
返回引用的话,先b的值赋给a,然后c的值赋给a,覆盖前者
返回对象的话,首先是不能执行,假设能够执行,那么,c的值赋给创建的临时对象(注意const量)了,这时也不会赋给a,不会赋给b
回复

使用道具 举报

2

主题

54

帖子

34.00

积分

新手上路

Rank: 1

积分
34.00
发表于 2020-1-5 08:45:02 | 显示全部楼层
我觉得说清楚了,等待高手总结,指教
回复

使用道具 举报

1

主题

8

帖子

4.00

积分

新手上路

Rank: 1

积分
4.00
 楼主| 发表于 2020-1-5 09:06:01 | 显示全部楼层
但是对于a=b=c的情况,返回值的话执行结果是不对的啊。
回复

使用道具 举报

2

主题

54

帖子

34.00

积分

新手上路

Rank: 1

积分
34.00
发表于 2020-1-5 10:00:01 | 显示全部楼层
#include <iostream>
using namespace std;

class A
{
public:
        A(int i):a(i){}
        A operator = (const A& ra)
        {
                a = ra.a;
                return *this;
        }
        void display()
        {
                cout << a;
        }
private:
        int a;
};

int main()
{
        A a(1);
        A b(2);
        A c(3);

        a=b=c;
        a.display();//3
        b.display();//3
        c.display();//3
        return 0;
}
回复

使用道具 举报

2

主题

54

帖子

34.00

积分

新手上路

Rank: 1

积分
34.00
发表于 2020-1-5 10:06:01 | 显示全部楼层
单纯就的a=b=c的形式,这个咋不对呢,你问题出在什么地方
回复

使用道具 举报

1

主题

8

帖子

4.00

积分

新手上路

Rank: 1

积分
4.00
 楼主| 发表于 2020-1-5 10:21:01 | 显示全部楼层
你看一下我发的那个链接上,在返回的是值的情况下,a与b的值都是99啊,这个为什么?我也试一下那个程序。谢谢。
回复

使用道具 举报

2

主题

54

帖子

34.00

积分

新手上路

Rank: 1

积分
34.00
发表于 2020-1-5 10:27:01 | 显示全部楼层
int main()
{
        A a(1);
        A b(2);
        A c(3);

        a = b = c;
        a.display();//3
        b.display();//3
        c.display();//3

        A d(4);
        A e(5);
        A f(6);

        (d = e) = f;
        d.display();
        e.display();
        f.display();
        return 0;
}
更正一个说法,根据这个测试的情况(d = e)的返回值好像不是个const的临时对象,理论上呢应该的是啊,这属于编译器相关么,等待高手指教
回复

使用道具 举报

2

主题

54

帖子

34.00

积分

新手上路

Rank: 1

积分
34.00
发表于 2020-1-5 11:03:01 | 显示全部楼层
根据这个测试的情况(d = e)的返回值好像不是个const的临时对象,理论上呢应该的是啊,这属于编译器相关么,等待高手指教
发现一个理解的漏洞,好,等高手
回复

使用道具 举报

2

主题

54

帖子

34.00

积分

新手上路

Rank: 1

积分
34.00
发表于 2020-1-5 11:06:01 | 显示全部楼层
up
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表