これは、Visual Studio 2010 で次のコードをコンパイルするときに発生します。私の質問は、C++ コンパイラは、関数がローカル変数のアドレスを返す場合に警告を発しますが、ローカル変数へのローカル参照を返すときに警告を発しないのはなぜですか?
それはまだ間違っていますか (ローカル変数へのローカル参照を返す)、コンパイラがそれを検出できなかっただけですか? 「num」と「r」のアドレスを調べると、同じメモリ位置を共有していることがわかります。
#include <iostream>
using namespace std;
int & intReference() {
int num = 5;
int &r = num;
cout << "\nAddress of num: " << #
//return num; // Compiler warning: C4172: returning address of local variable or temporary
return r; // No warning?
}
void main() {
int &k = intReference();
cout << "\nk = " << k; // 5
cout << "\nAddress of k: " << &k; // same address as num
char c;
cin.get(c);
}