このコードはなぜ機能しますか?毎回60
を出力します。まず、3210は、関数が名前のない構造ではなく、既存の変数への参照を返すことを示します。第二に、関数が返ってきたときに一時的に死んではいけません。私は最新のGCCバージョンがOSX上にあるものを使用しています...誰かが私にこの理由を説明してもらえますか?rvalueへのconst左辺参照を一時的に返しますか?なぜこれは機能しますか?
#include <iostream>
using namespace std;
struct thingy {
double things;
double moreThings;
double evenMoreThings;
};
const thingy& getThingy() {
return {60, 60, 60};
}
int main() {
cout << getThingy().evenMoreThings << endl;
}
これが機能するのであれば、どうしてですか?
const thingy& getThingy() {
thingy t{60, 60, 60};
return t;
}
これらはどちらも未定義の動作なので、動作するように見えるものもあります。 – GManNickG
@GManNickG最初の例は毎回動作するようです。私はそれをしないと壊れているwhileループに置いても、複数の試行でうまくいきます...あなたが受け入れられた答えを読んだら、私はそれが起こっていると思います。コンパイラの愚かさ、これは技術的に起こってはならないことを意味する...? – Naerion
毎回動作するように見えるのは、未定義の動作に対しては完全に有効な動作です。それはあなたの製品をデモする日の作業を停止します。 – GManNickG