[求助]关于非值传递函数返回的问题
使用的编译器是VC6.0请先看下面的程序:
#include <iostream>
int &functionOne()
{
int TEMP = 10;
int *temp = &TEMP; //编译器虽然没有出现警告,但这样的程序可靠吗?
return *temp; //正确
}
int &functionTwo()
{
int temp = 10;
return temp; //警告提示warning
}
int *functionThree()
{
int temp = 20;
return &temp; //警告提示warning}
int main()
{
int &one = functionOne();
int &two = functionTwo();
int *three = functionThree();
std::cout << one << two << *three;
return 0;
}
编译可以通过但出现警告,提示是:returning address of local variable or temporary (位置是functionTwo和functionThree函数的return语句)
我的问题是这样的:
为什么functionOne没有出现警告呢?
难道使用指针来创建变量,在函数返回时不会作为局部变量而被丢弃?
[新问题]
若将functionTwo函数改为如下:
则编译时没有出现警告了,这又是为什么呢?
int &functionTwo()
{
int TEMP = 10;
int &temp = TEMP; //在函数返回时,变量TEMP及其同名变量temp应该被丢弃,那么这个程序可靠吗?
return temp; //正确
}
thank you for your help.
[[it] 本帖最后由 anlogo 于 2008-4-8 13:09 编辑 [/it]]