所以,我有两个函数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()
返回对{{{{1}的引用的任何内容。 1}}。
我的编译器(g ++通过MinGW,如果它有所作为)只是睡在工作上?有没有关于引用的内容可以使指称对象超出范围?或者我的参考语法是不是很糟糕?
非常有责任!
答案 0 :(得分:4)
您的两个测试用例并不平行。这个计划:
#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]