0

以下に示すような参照ラッパーを返すのは危険ですか?

std::vector<std::reference_wrapper<int>> foo() {

    int x = 10;

    std::vector<std::reference_wrapper<int>> vec;
    vec.push_back(x);
    return vec;

}

foo2() {
    std::cout << foo()[0] << std::endl;
}

ローカル/スタック変数 x は で失われる可能性があると思いますfoo2()

4

1 に答える 1

1

関数std::vector<std::reference_wrapper<int>> foo();は基本的に、破棄された関数のスタックにあるローカル変数への参照を含むベクトルを返します。ダングリング参照のベクトル。これは未定義の動作です。

于 2016-09-17T13:44:59.437 に答える