编译器警告 re:对局部变量的引用

compiler warnings re: references to local variables

本文关键字:局部变量 引用 警告 re 编译器      更新时间:2023-10-16

所以,我有这两个函数ref()pointy()分别创建一个本地引用和指向本地定义的int的指针:

#include <iostream>
int& ref() {
  int knuckles = 6;
  int &chuckles = knuckles;
  return chuckles;
};
int* pointy() {
    int buckles = 8;
    return &buckles;
};
int main(int argc, char **argv) {
    int a = ref(), *b = pointy();
    int c = 14, d = 20;
    std::cout << a << ' ' << *b << ' ' << c+d;
};

代码编译得很好,并且给出了有关返回局部变量 buckles 地址的警告,但我担心的是它没有说明ref()返回对knuckles的引用。我的编译器(通过 MinGW 的 g++,如果它有所作为)只是在工作上睡觉吗?引用是否有一些东西可以防止引用超出范围?还是我的参考语法不好?

感谢!

您的两个测试用例不是平行的。此程序:

#include <iostream>
int& ref() {
  int knuckles = 6;
  return knuckles;
};
int* pointy() {
    int buckles = 8;
    return &buckles;
};
int main(int argc, char **argv) {
    int a = ref(), *b = pointy();
    int c = 14, d = 20;
    std::cout << a << ' ' << *b << ' ' << c+d;
};

生成以下警告:

$ g++ -O4 -std=c++0x    x.cc   -o x
x.cc: In function ‘int& ref()’:
x.cc:4:7: warning: reference to local variable ‘knuckles’ returned [enabled by default]
x.cc: In function ‘int* pointy()’:
x.cc:9:9: warning: address of local variable ‘buckles’ returned [enabled by default]