打印

函数返回问题

[复制链接]
1216|14
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
sinadz|  楼主 | 2012-6-12 17:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
zb0830| | 2012-6-12 17:43 | 只看该作者
个人感觉第三种。。。

使用特权

评论回复
板凳
秋天落叶| | 2012-6-12 18:08 | 只看该作者
1和3都安全,都返回局部变量的拷贝。
2和3都返回局部变量的引用,危险。

使用特权

评论回复
地板
gxgclg| | 2012-6-12 18:22 | 只看该作者
2,3安全
1内存泄漏,4返回局部变量

使用特权

评论回复
5
无冕之王| | 2012-6-12 18:27 | 只看该作者
LZ可以自己做个程序测试一下

使用特权

评论回复
6
dfsa| | 2012-6-12 18:32 | 只看该作者
1和3是安全,返回的是临时对象的A拷贝,
将第2个改为:
const A& GetA()
{
return A();
}
可通过编译

使用特权

评论回复
7
eydj2008| | 2012-6-12 20:16 | 只看该作者
首先 写法上
A Get()
{
return A()
}
编译是不通过的。 A指什么? 函数名? 还是GET?
A& Get()
在这里你想表达什么意思?

排除 3 4 动态内存 做为返回量 是错误的。 至少需要加STATIC 静态变量

使用特权

评论回复
8
hgjinwei| | 2012-6-12 21:00 | 只看该作者
看到C++就烦

使用特权

评论回复
9
xsgy123| | 2012-6-13 16:16 | 只看该作者
最好的办法是自己测试一下

使用特权

评论回复
10
yybj| | 2012-6-13 16:26 | 只看该作者
首先 写法上
A Get()
{
return A()
}
编译是不通过的。 A指什么? 函数名? 还是GET?
A& Get()
在这里你想表达什么意思?

排除 3 4 动态内存 做为返回量 是错误的。 至少需要加STATIC 静态变量 ...
eydj2008 发表于 2012-6-12 20:16

分析的很有条理

使用特权

评论回复
11
火箭球迷| | 2012-6-13 16:34 | 只看该作者
1,3比较安全

使用特权

评论回复
12
yybj| | 2012-6-14 17:22 | 只看该作者
1和3都安全,都返回局部变量的拷贝。
2和3都返回局部变量的引用,危险。
秋天落叶 发表于 2012-6-12 18:08

分析正确,建议自己测试一下,印象更加深刻一点

使用特权

评论回复
13
baidudz| | 2012-6-14 18:03 | 只看该作者
1存在内存泄漏,4返回局部变量,不安全

使用特权

评论回复
14
john_lee| | 2012-6-15 02:23 | 只看该作者
1、3安全。1显然不可能有什么内存泄漏,3只是1的另外一种写法,但实际上就是1。
2在最新的C++11标准中非法,函数返回的是临时对象的引用,按C++11标准,临时对象属于“右值”,而“引用”只能用于“左值”,“常量引用”倒是能用于右值,但把函数改为const 引用后,又会出现“返回局部对象的引用”错误。
4也是错误的,但和2有一些区别,2是临时对象,是无名的,而4则是“具名”的,标准认为是左值,所以将直接出现“返回局部对象的引用”错误。

使用特权

评论回复
15
john_lee| | 2012-6-15 02:32 | 只看该作者
P.S.
C++11新增了语法:右值引用:“&&”。
3可以改为右值引用,把一个&改为两个&就行了,这可以避免产生引用非法的错误,但就3的情况来说,仍然会产生“返回局部对象的引用”的错误。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

304

主题

2313

帖子

0

粉丝