c++ - 这些本地函数的返回地址之间有什么区别?

标签 c++ reference

我有以下函数(用 Visual C++ 2005 编写)

int &getInt_1()
{
    int a = 5;
    int &p = a;
    int p1 = p; // Line 1
    return p1;
}

int &getInt_2()
{
    int a = 5;
    int &p = a;
    return p;
}

据我所知,以上两个函数都返回局部变量的地址。如果我是对的,那么我有一些问题如下:

  1. 以上功能有什么区别?为什么 getInt_1() 会收到编译器的警告(“返回局部变量的地址”)而 getInt_2() 不会?

  2. 第 1 行 是什么意思?在 第 1 行 之后,p1 是否也成为对 a 的引用?

最佳答案

  1. getInt_1 返回对 p1 的引用。 getInt_2 返回对 a 的引用。两者都是相同的未定义行为,不要这样做。 VC 应该对两者都给出警告。
  2. 不,您只需复制值。

关于c++ - 这些本地函数的返回地址之间有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10410208/

相关文章:

c++ - boost::future 和 std::future 的不同行为

c++ - 将 hls 直播转换为 rtmp

c++ - 获取 lambda 参数类型

c++ - C++ 中静态引用

c++ - 在 C++ 中没有此函数的匹配函数

c++ - Eclipse CDT 编辑器是否支持 altivec C++ 扩展?

c++ - 编译 C++ dll Visual Studio 链接错误与 crt 库

c# - 如何将 System.Web 引用添加到 Windows 窗体应用程序

c++ - 通过引用传递指向 const 对象的指针

c++ - 为什么 `const int& k = i;++i; ` 可能?