4

参照のペアを再配置したいrefPair

int a, b, c, d;
pair<int&, int&> refPair(a, b);

これを行うと、c と d の値が a と b にコピーされるようですが、これは望ましくありません。

refPair = pair<int&, int&>(c, d);

ただし、これを行うことはできません

new(&refPair) pair<int&, int&>(c, d);

これが合法であり、未定義の動作を引き起こさないかどうかを知りたいです。私のコンパイラでは問題なく動作しますが、移植可能かどうかはわかりません。

4

2 に答える 2

4

そのような非自明なクラスを構築することは違法であるため、未定義の動作であると確信しています(std::pairは非自明なAFAIKになる可能性があります)。

とにかく、どれが再装着可能か調べてstd::reference_wrapperください。

refPair = pair<std::reference_wrapper<int>, std::reference_wrapper<int> >(std::ref(c), std::ref(d));
于 2013-01-27T16:28:52.517 に答える
0

あなたが書く、

「参照のペアを再配置したい refPair」

いいえ、参照を再配置することはできません。

技術的には、代わりにポインターを使用できます。

しかし、元のコードが行うことは無意味です。そして、修正された「機能する」コードが行うことは無意味であり、形式的には良くありません。したがって、これは XY の質問である可能性があります。つまり、実際の問題 X ではなく、想像上の解決策 Y の欠点について質問している場合です。これは何ですか?

于 2013-01-27T16:39:16.363 に答える