const_cast
の後、値はmain関数で変更されません。しかし、外部関数を呼び出すときに変更されても、メインに古い値が出力されます(const int
が最初に初期化されます)。const_castは値を変更しません
int main() {
const int i = 5;
int* p = const_cast<int*>(&i);
*p = 22;
std::cout<<i;
return 0;
}
出力は5
です。なぜですか?ウォッチ・ウィンドウはi = 22
の値を示しています
、なぜそれが5を印刷していますか?値がChangeValue
関数を呼び出した後であっても値が変化した場合に変更されないのはなぜ
void ChangeValue(const int i) {
int* p = const_cast<int*>(&i);
*p = 22;
std::cout<<i; //Here the value changes to 22
}
int main() {
const int i = 5;
ChangeValue(i); //Value changes to 22 in the ChangeValue function
std::cout<<i // It again prints 5.
}
:私は外部関数を呼び出す場合、出力は異なりますか?
Linuxプラットフォームで同じ出力が得られます。誰かが私の混乱をはっきりさせてくれますか?
* "読み取り専用セグメントに格納する可能性があります" * - SIGSEGVなどの可能性があります。 "5"が表示されているのは、書き込みが試行されたときに 'i'の値の内部レコードを更新しない(*未定義の動作*のコードの影響をモデル化する義務はない) cout << i'であり、値の元の変更されていないレコードを使用して、<<(std :: ostream&、int)によって期待されるレジスタまたはスタック位置をロードします。 –