3

したがって、これら2つの関数が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ことについて何も述べていないことです。私のコンパイラ(違いが生じる場合は、MinGW経由のg ++​​)は仕事で眠っているだけですか?指示対象が範囲外になるのを防ぐ参照について何かありますか?それとも私の参照構文はちょうど悪いですか?ref()knuckles

とても感謝しております!

4

1 に答える 1

4

2 つのテスト ケースが並行していません。このプログラム:

#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]
于 2012-04-11T16:20:19.663 に答える