私はC++のリファレンスを使いこなしています。私が理解しているのは、非const変数とその同じ変数へのconst参照を持ち、非const変数を変更した場合、参照にその変更が反映されるということです。const std :: stringリファレンスの参照先を変更する
例:
void foo() {
int x = 5;
const int& y = x;
x = 10;
std::cout << "x = " << x << std::endl;
std::cout << "y = " << y << std::endl;
}
は私のために次の出力を生成します。
x = 10
y = 10
をしかし、私ははstdする::文字列をタイプを変更した場合、const参照を反映していないようです修正変数:
void foo() {
std::string x = "abc";
const std::string& y = x;
x = "xyz";
std::cout << "x = " << x << std::endl;
std::cout << "y = " << y << std::endl;
}
は私のために、以下を生成します。
std ::文字列でこれをしようとしたときにx = xyz
y = abc
これは通常予想される動作ですか? (私はGCC 4.6.0を使用していますが、私は現時点で利用可能な他のコンパイラはありませんので、この特定のバージョンでのみ起こっているかどうかわかりません)
* G ++でコンパイルされたそのコード - MP-4.6(GCC)4.6.0 20100814枚の*のプリントが '二回、私は別の最適化レベルで試してみましたxyz' 。あなたは*正確なコードをコピーしましたか? –
私の期待どおりに動作します。 ( "xyz \ nxyz \ n")。これは私にはBCAKのバグかコピー&ペーストのバグがあると信じています。コードを確認し、コンパイル可能なバージョンのコードを投稿してください(**コピー&ペースト**を使用してください)。 –
情報ありがとうございました。別のファイルにコピーして貼り付けることで、私が期待していたように動作させました。オリジナルをバイナリモードで見たとき、私の宣言の中の "&"の前に隠されていたたくさんの余分なバイトがありました。私はそれがどのようにしてコンパイルされているのか分かりません。しかし、これで私を助けてくれてありがとう。あなたはすべて素晴らしいです! – Bobby