【发布时间】:2012-07-07 12:57:36
【问题描述】:
我需要明确一个基本概念。此代码工作正常。有人可以解释一下,如果函数 calDouble 已经返回 int 的地址(引用),为什么我需要在 main int *j = &calDouble(i); 中进一步使用 & 运算符获取int的地址(参考)?谢谢。
int& calDouble(int x)
{
x = x*2;
return x;
}
int main(int argc, char *argv[])
{
int i = 99;
int *j = &calDouble(i);
system("PAUSE");
return EXIT_SUCCESS;
}
【问题讨论】:
-
您可能应该将
int& calDouble(int x)更改为int& calDouble(int& x),这样您就不会返回对x的悬空引用。 -
实际上,您的代码不起作用。您不能将相同的参数视为一个值,然后将其作为引用返回。我觉得你的问题很好。但我也认为它说明了 C++ 语言是什么可怕 - 它让你犯的不正当错误 - 甚至没有给你一个暗示有问题。将这样一个简短的、看似简单的示例乘以对毫无戒心的世界造成的数百万(数十亿?)行(可能有错误)C++ 代码......
-
“工作正常”我的意思是它编译没有错误。
-
@developer:那么,你的编译器有问题,因为我警告过返回对局部变量的引用。
-
@user315052:我知道。但现在这对我来说是一个单独的问题......顺便说一句,你使用的是哪个编译器?
标签: c++ function reference operator-keyword