类的初始化 问题

xiangongda 2008-12-29 05:21:25
请问
class A;



A bb=5;

A bb(5);



A bb=A(5);


3种 方式 有什么不同?


...全文
114 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
l176266956 2008-12-29
  • 打赏
  • 举报
回复
要看具体编译器。
arong1234 2008-12-29
  • 打赏
  • 举报
回复
我觉得三种应该完全一样,不过我从来不关注这种细节
wjb_yd 2008-12-29
  • 打赏
  • 举报
回复
都一样的,都是构造函数,第一个第三个被优化了
luojc714 2008-12-29
  • 打赏
  • 举报
回复
貌似在深度《探索C++对象模型》中有提到,前两个都调用构造函数,第三个式子先调用构造函数构造一个临时对象,然后用这个临时对象为参数调用拷贝构造函数!
nullah 2008-12-29
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 xuruichen 的回复:]
都是调用构造函数,第三用得应该是赋值操作符吧
[/Quote]
优化了 不会调用赋值操作符
xuruichen 2008-12-29
  • 打赏
  • 举报
回复
都是调用构造函数,第三用得应该是赋值操作符吧
nullah 2008-12-29
  • 打赏
  • 举报
回复
upup
就呆在云上 2008-12-29
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 anglecloudy 的回复:]
C/C++ code

#include <iostream>
using namespace std;
class A
{
public:
A(){ cout<<"a默认构造"<<endl; }
A(int n){ cout<<"a的转换函数"<<endl; }
A(const A& temp){ cout<<"拷贝构造"<<endl; }
};
int main()
{
A bb=5; //转换

A cc(5); //转换


A dd=A(5); //转换+COPY构造

return 0;
}
[/Quote]

你用的什么编译器呢?
就呆在云上 2008-12-29
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 ckt1120 的回复:]
class A;
A bb=5; // 转换构造函数
A bb(5); // 构造函数
A bb=A(5); // 构造函数,拷贝构造函数
[/Quote]

不对
都是调用构造函数,第三个没有调用拷贝构造函数

区别在于第一个是隐士转换,后两个都是显示的
nineforever 2008-12-29
  • 打赏
  • 举报
回复
参见Exceptional C++, Item 42. Variable Initialization - is it?

A bb(5); //构造函数A(int)
A bb=A(5); //等价于A bb(A(5)),构造函数A(int)生成临时对象+拷贝构造函数。但是编译器允许进行优化,所以可能和A bb(5)等价
A bb=5; //等价于A bb(A(5)),同上
hhyttppd 2008-12-29
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 hhyttppd 的回复:]
这要看你的A是怎么定义的。
[/Quote]

我搞错了,这三个都是一个效果。
xiaoyisnail 2008-12-29
  • 打赏
  • 举报
回复
class A;
A bb=5; 构造函数,拷贝构造函数
A bb(5); 构造函数
A bb=A(5); 构造函数,拷贝构造函数
OenAuth.Net 2008-12-29
  • 打赏
  • 举报
回复


#include <iostream>
using namespace std;
class A
{
public:
A(){ cout<<"a默认构造"<<endl; }
A(int n){ cout<<"a的转换函数"<<endl; }
A(const A& temp){ cout<<"拷贝构造"<<endl; }
};
int main()
{
A bb=5; //转换

A cc(5); //转换


A dd=A(5); //转换+COPY构造

return 0;
}
bitwwzhang130 2008-12-29
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 ckt1120 的回复:]
class A;
A bb=5; // 转换构造函数
A bb(5); // 构造函数
A bb=A(5); // 构造函数,拷贝构造函数
[/Quote]
正解
hhyttppd 2008-12-29
  • 打赏
  • 举报
回复
这要看你的A是怎么定义的。

OenAuth.Net 2008-12-29
  • 打赏
  • 举报
回复
请问
class A; 调用默认无参构造函数


A bb=5;
A bb(5); //这两个一样


A bb=A(5); //调用拷贝构造函数




3种 方式 有什么不同?
你可以自己把所有的构造函数都写出来,然后测试一下就知道了。
ckt 2008-12-29
  • 打赏
  • 举报
回复
class A;
A bb=5; // 转换构造函数
A bb(5); // 构造函数
A bb=A(5); // 构造函数,拷贝构造函数

65,211

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧