函数返回值类型为类类型问题

芳草源 2015-06-26 10:55:11
请问一下,以类类型为返回类型的函数来初始化一个类对象的时候,赋值构造函数不是要调用两次吗?为什么我注释掉析构函数后的结果和加上析构函数的结果不一样呢?麻烦大家看一下呐。
...全文
330 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
pengzhixi 2015-06-26
  • 打赏
  • 举报
回复
就是一个优化的问题。也就是说你的编译器会根据是否显示提供析构函数来确定是否优化的。你可以换个其他的编译器再看看。结果应该和你的这个编译器不一样
jiht594 2015-06-26
  • 打赏
  • 举报
回复
看你IDE页够老了, 更新一下把 可以f11单步一下, 看看到底走到哪里了
jiht594 2015-06-26
  • 打赏
  • 举报
回复
应该是优化了 不要太纠结
芳草源 2015-06-26
  • 打赏
  • 举报
回复
引用 2 楼 jiht594 的回复:
应该是优化了 不要太纠结
但是如果是优化了的话,我在同一个编译器下运行的,两者都应该优化才是啊,为什么才一个被优化了呢?
芳草源 2015-06-26
  • 打赏
  • 举报
回复
附上源码,大家帮忙看看呐。
#include <iostream>
#include <string>
using namespace std;

class HowMany2{  
	static int objectCount;
public:
	HowMany2(const string& id)
	{
		++objectCount;
		print("HowMany2()");
	}
	/*
	~HowMany2()
	{
		--objectCount;
		print("~HowMany2()");
	}
	*/
	HowMany2(const HowMany2& h) 
	{
		++objectCount;
		print("HowMany2(const HowMany2&)");
	}
	void print(const string& msg = "") const
	{
		if(msg.size() != 0)
			cout<<msg<<endl;
		cout<<"\t"<<"对象数量: "<<"objectCount = "<<objectCount<<endl;
		cout<<endl;
	}
};

int HowMany2::objectCount = 0;

HowMany2 f(HowMany2 x)
{
	cout<<"Entering f()\n";
	return x;
}

void main()
{
	HowMany2 h("h");
	HowMany2 h2 = f(h);
}
bear234 2015-06-26
  • 打赏
  • 举报
回复
编译器会给你优化的 你只需要语法上明白每一步做什么调用了什么函数即可 实际操作中编译器不会sb到真的按照语法说的来 它会适当进行优化 比如函数返回值肯定会被优化的
yangyunzhao 2015-06-26
  • 打赏
  • 举报
回复
4个是没有优化的结果 1、HowMany2 h("h");赋值构造1个 2、HowMany2 f(HowMany2 x) 传参,应该是拷贝构造1个 3、f返回一个临时对象,也应该是拷贝构造 4、HowMany2 h2 拷贝构造1个

65,187

社区成员

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

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