怎么让C#c 函数返回值值为某个对象

C++函数返回类对象-返回值优化 - 为程序员服务
C++函数返回类对象-返回值优化
update 这应该属于Named Return Value Optimization(NRVO)或者Return Value Optimization(RVO)返回值优化的范畴。
RVO就是这样的:
C func()
return C();
int main(int argc, char **argv)
C c = func();
编译器在func()函数中,返回时没有拷贝构造一个C的实例,一般来讲可以这样实现,比如外面调用的时候是用c去接受的,会直接构造c,然后在函数内部修改c的引用。
C func(C &__hidden__)
__hidden__ = C();
NRVO即这样:
C func()
c.method();
c.member = 10;
C func(C &__hidden__)
__hidden__ = C();
__hidden__.method();
__hidden__.member = 10;
但若函数内部实现有不同return的分支,编译器可能就不知道该怎么优化进而不会优化。其中更详细的内容可以参看 。
在C++中,当一个函数返回类对象时得注意因拷贝构造函数的调用引来的开销,具体见下面的例子。例如某个函数直接return Integer(i); 创建一个临时Integer对象并返回它(没有copy一份),而Integer tmp(i);
调用构造函数创建tmp对象;调用copy构造函数将tmp拷贝到外部返回值的存储单元;在tmp的作用域结尾时调用析构函数;这个也是一般来说这样,具体来说也与具体编译器实现相关。
下面的例子分别用Visual Studio 2012中的编译器(默认和O2优化结果不一样哦)和G++4.7.2(mingw)结果。
#include &iostream&
A(int i):a(i)
cout && "A() :" && a &&
~A()
cout && "~A()" && a &&
A(const A& x):a(x.a)
cout && "copy A()" && a &&
A test1()
return A(1);
A test2()
A tmp(2);
int main()
A a = test1();
A b = test2();
cout && "before exit" &&
可以看出,编译器面对这样的情况都做了相关的优化,VS2012自带的编译器默认情况下才能看到copy 构造函数的调用。
更多内容,请参看:
Named Return Value Optimization in Visual C++ 2005:
c++: RVO and NRVO:
相关文章2014 年 07 月 02 日—《》2014 年 05 月 28 日—《》2013 年 09 月 08 日—《》2012 年 03 月 19 日—《》2012 年 03 月 10 日—《》
记录我的学习、生活、工作。主攻软件工程,计算机图形学,数据挖掘
原文地址:, 感谢原作者分享。
您可能感兴趣的代码能不能用一个函数返回一个不确定的对象啊_c#吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:95,644贴子:
能不能用一个函数返回一个不确定的对象啊收藏
因为想考虑程序使用数据库时,如果要求更换数据库重写代码非常麻烦,所以用了抽象工厂模式来生成不同的数据库对象,但是ACCESS是用OleDbDataReader而SQLserver是用SqlDataReader来读取数据,所以想不出来返回值应该怎么用才好。只要能用一个函数完成这个功能就好了。上代码吧
[SALOON索龙]服装整烫及配套设备的一次革命!!!
interface IStudents
??? GetStudents();
void Close();
}ACCESS类和SQLserver类都继承这个借口,然后重载这个GetStudents ()函数,怎么返回呢?求大神啊
返回object?但是 你retrun的时候 需要强转为object
返回IDataReaderOleDbDataReader和SqlDataReader 都实现了这个接口
泛型方法满足你的条件
登录百度帐号推荐应用
为兴趣而生,贴吧更懂你。或2012年 总版技术专家分年内排行榜第一
2013年 总版技术专家分年内排行榜第七2011年 总版技术专家分年内排行榜第五2009年 总版技术专家分年内排行榜第九
2013年 总版技术专家分年内排行榜第一
2014年 总版技术专家分年内排行榜第三
2016年10月 .NET技术大版内专家分月排行榜第一2016年8月 .NET技术大版内专家分月排行榜第一2016年7月 .NET技术大版内专家分月排行榜第一
2016年9月 .NET技术大版内专家分月排行榜第二2016年6月 .NET技术大版内专家分月排行榜第二2016年3月 .NET技术大版内专家分月排行榜第二2016年1月 .NET技术大版内专家分月排行榜第二2015年12月 .NET技术大版内专家分月排行榜第二2015年2月 .NET技术大版内专家分月排行榜第二2015年1月 .NET技术大版内专家分月排行榜第二2014年11月 .NET技术大版内专家分月排行榜第二2014年5月 .NET技术大版内专家分月排行榜第二2014年4月 .NET技术大版内专家分月排行榜第二2012年2月 多媒体/设计/Flash/Silverlight 开发大版内专家分月排行榜第二
本帖子已过去太久远了,不再提供回复功能。答案 ―C#1-6章习题_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
答案 ―C#1-6章习题
上传于||文档简介
&&考​试
阅读已结束,如果下载本文需要使用0下载券
想免费下载更多文档?
定制HR最喜欢的简历
下载文档到电脑,查找使用更方便
还剩21页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢

我要回帖

更多关于 c语言函数的返回值 的文章

 

随机推荐