3

重複の可能性:
const_cast は安全ですか?

明らかに、私はこのコードを書きませんが、これは実際のプログラムで発生した非常に単純な例です。

#include <iostream>

void change(const int& data)
{
    int& data2 = const_cast<int&>(data);
    data2 = 100;
}

int main()
{
    int thing = 123;
    change(thing);

    std::cout << thing << "\n";
}

const int&これが参照されるデータを変更するのは明確に定義された動作ですか、それとも関数が渡された値を変更できず、それに応じてコードを生成できないということを渡すため、コンパイラはそれを想定できますか?

編集:私が試したすべてのコンパイラは、変更された値100を出力しました。

これはCan C++ compiler assume a const bool & value will not change?の複製のようです。ですから、これを閉じてよかったです。

4

1 に答える 1

0

元の値が一定であったかどうかを知らない限り、これは明確に定義された動作ではありません。あなたが与えた正確な例で動作します。ただし、const 変数を渡すと、メモリ アクセス違反が発生する可能性があります。これは、コンパイラが const 変数を読み取り専用メモリ ページに配置したためです。

于 2012-10-07T20:00:07.010 に答える