C++ 构造函数的一些问题

fztfztfzt 2015-04-17 09:31:32
class B
{
public:
B(){
cout << "构造" << endl;
}
~B(){ cout << "析构" << endl; }
B(const B&){ cout << "拷贝" << endl; }
B(int i) :data(i){ cout << "参数构造" << endl; }
protected:
private:
int data;
};
B play(B b)
{
return b;
}
int main() {
B b(B());
return 0;
}

为什么这个什么都不输出?
为什么这个就一个构造函数?不该是b一个B()一个吗?
实参5传到形参就只用了一个参数构造函数,没有拷贝函数吗?
...全文
225 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
jiht594 2015-04-18
  • 打赏
  • 举报
回复
cout << typeid(b).name() << endl; //class B __cdecl(class B (__cdecl*)(void))
jiht594 2015-04-18
  • 打赏
  • 举报
回复
引用 4 楼 fztfztfzt 的回复:
[quote=引用 3 楼 relaxisland 的回复:] 第一个问题 B b(B()); 被当做一个函数声明,函数名b,返回值的类型是B 第二个问题 B b = B(); B() 调用构造函数, b=不是调用拷贝构造函数,是调用赋值函数, 这边,没有重载赋值函数,就是默认的按值赋值 第三个问题 实参5传到形参就只用了一个参数构造函数,没有拷贝函数吗? ----》 对的,构造一个临时对象,直接传给函数。
对于第一个:请问你们的B()是什么参数?函数指针? 第二个:
class B
{
	int data;
public:
	B(){ puts("构造"); }
	~B(){ puts("析构"); }
	B(const B&){ puts("拷贝"); }
	B(int i) :data(i){ puts("参数"); }
	B&operator=(const B&)
	{
		puts("赋值");
		return *this;
	}

};
int main()
{
	B b = B();
}
重载了赋值,但结果还是一样的,没有出现赋值。。。[/quote] B b = B();调用构造函数和拷贝构造函数, 但是编译器优化掉了 你可以把拷贝构造函数设置为private, 能发现是无法编译的.
fztfztfzt 2015-04-18
  • 打赏
  • 举报
回复
引用 3 楼 relaxisland 的回复:
第一个问题 B b(B()); 被当做一个函数声明,函数名b,返回值的类型是B 第二个问题 B b = B(); B() 调用构造函数, b=不是调用拷贝构造函数,是调用赋值函数, 这边,没有重载赋值函数,就是默认的按值赋值 第三个问题 实参5传到形参就只用了一个参数构造函数,没有拷贝函数吗? ----》 对的,构造一个临时对象,直接传给函数。
对于第一个:请问你们的B()是什么参数?函数指针? 第二个:
class B
{
	int data;
public:
	B(){ puts("构造"); }
	~B(){ puts("析构"); }
	B(const B&){ puts("拷贝"); }
	B(int i) :data(i){ puts("参数"); }
	B&operator=(const B&)
	{
		puts("赋值");
		return *this;
	}

};
int main()
{
	B b = B();
}
重载了赋值,但结果还是一样的,没有出现赋值。。。
relaxisland 2015-04-17
  • 打赏
  • 举报
回复
第一个问题 B b(B()); 被当做一个函数声明,函数名b,返回值的类型是B 第二个问题 B b = B(); B() 调用构造函数, b=不是调用拷贝构造函数,是调用赋值函数, 这边,没有重载赋值函数,就是默认的按值赋值 第三个问题 实参5传到形参就只用了一个参数构造函数,没有拷贝函数吗? ----》 对的,构造一个临时对象,直接传给函数。
ztenv 版主 2015-04-17
  • 打赏
  • 举报
回复
第一个问题:b=B();是初始化, 第二个问题:return b的时候需要拷贝
真相重于对错 2015-04-17
  • 打赏
  • 举报
回复
b= 的时候发生拷贝

64,648

社区成员

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

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