返回信息流s = Sales_item();
s是一个对象,上式我理解是调用构造函数,将返回值赋给对象s。
但是构造函数不是没有返回值的?请大家指点
这是一条镜像帖。来源:北邮人论坛 / cpp / #48528同步于 2010/12/30
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
关于构造函数
CLegend
2010/12/30镜像同步12 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
这样真不会有问题么?
如果真可以的话,你可以认为分成两步?
1. 构造函数,产生临时对象 Sale_item tmp;
2. operator=复制,s = tmp;
第一步使用无参数的构造函数...
第二步使用的是拷贝构造函数...因为还没有s这个对象呢...
【 在 ericyosho (ericyosho) 的大作中提到: 】
: 这样真不会有问题么?
: 如果真可以的话,你可以认为分成两步?
: 1. 构造函数,产生临时对象 Sale_item tmp;
: ...................
这是定义无参对象的方法之一
两种方法 第一种Sale_item s;(不是Sale_item s();)
第二种是Sale_item s=Sale_item();
第一种是直接调用默认构造函数创建这个对象
第二种是调用默认构造函数形成一个临时对象,再用它来按值初始化s。
【第二种就是你问题里面的方式,但是这么理解的话,这个过程会调用默认构造函数,复制构造函数和析构函数。但是我的编译器显示出来的也是只调用了默认构造函数。为什么这样我也不太清楚,我理解是编译器在这种情况下是允许跳过复制构造函数直接创建对象的】
看你怎么写了,如果这么写:
Sales_item s = Sales_item();
那么就是先构造一个临时的Sales_item的实例,然后再调Sales_item的拷贝构造,来构造s;
如果这么写:
Sales_item s;
s = Sales_item();
那么就先调Sales_item的默认构造函数构造s,然后调Sales_item的默认构造函数来构造一个临时实例,再然后调用operator=把临时对象复制到s
没记错应该是这样的
【 在 CLegend 的大作中提到: 】
: s = Sales_item();
: s是一个对象,上式我理解是调用构造函数,将返回值赋给对象s。
: 但是构造函数不是没有返回值的?请大家指点
: ...................
【 在 potatossss 的大作中提到: 】
: 看你怎么写了,如果这么写:
: Sales_item s = Sales_item();
: 那么就是先构造一个临时的Sales_item的实例,然后再调Sales_item的拷贝构造,来构造s;
: ...................
我觉得跟拷贝构造函数没有关系吧,两种情况都用的赋值操作符,只是第一种调用了一次构造函数,是这样么?
是我记错了,这种写法
Sales_item s = Sales_item();
直接就调了一次构造函数,而这种
Sales_item s;
s = Sales_item();
调了2次构造和一次赋值
【 在 CLegend 的大作中提到: 】
: : 看你怎么写了,如果这么写:
: : Sales_item s = Sales_item();
: : 那么就是先构造一个临时的Sales_item的实例,然后再调Sales_item的拷贝构造,来构造s;
: ...................