2 u011049916 u011049916 于 2014.10.13 20:33 提问

c++函数的直接返回和用引用返回有什么区别,希望大神回答具体点
c c++
#include <stdio.h>

static void func(int i_SrcNum, int &i_result)
{
    i_result = i_SrcNum;
    return ;
}

static int func(int i_SrcNum)
{
    return i_SrcNum;
}

int main(int argc, char **argv)
{
    int a = 0;
    int b = 100;
    func(b, a);
    printf("%d\n", a);

    a = func(b);
    printf("%d\n", a);

    return 0;
}

以上程序用到的函数func(int i_SrcNum, int &i_result)和int func(int i_SrcNum)两个函数有什么区别,安全等等方面麻烦回答详细一点谢谢。

3个回答

starytx
starytx   Rxr 2014.12.10 11:37
已采纳

第一个不存在拷贝,直接返回形参(有安全隐患,因为形参在函数结束后会失去作用范围,处于不可控的状态,俗称 释放)
第二个实际是返回了形参的一个临时的拷贝对象,这个是没有问题的

zhanyiwen1
zhanyiwen1   2014.10.14 09:23

函数func(int i_SrcNum, int &i_result)和int func(int i_SrcNum),一个是传递数值,一个是传递地址,传递地址的能保持数值,a = func(b)确实被调用了,但是a的值不能保持下去,所以返回原来的值。

Jiazhou_Lvguan
Jiazhou_Lvguan   2014.10.14 17:21

func(int i_SrcNum, int &i_result)
中i_result在传进来的时候(址传递)系统已经为其分配了空间,在i_result的有效代码段内执行,i_result是不会被被释放掉

func(int i_SrcNum) i_SrcNum 为值传递,这时形参i_SrcNum被放在了栈区,结束后i_SrcNum就被释放掉了。

Csdn user default icon
上传中...
上传图片
插入图片