推 hilorrk:如果我沒記錯 用強制轉換去掉const的pointer來做賦值的動 04/29 10:28
→ hilorrk:作本來就是undefined behavior...結果一樣只是碰巧吧? 04/29 10:29
→ spider391:我改成 C 的寫法用 c compiler 可以修改 04/29 10:31
→ hilorrk:我一直都覺得強制轉型在多數情況下都是錯誤的設計才會產生 04/29 10:31
→ hilorrk:簡單來說 const_cast只是把const去掉以適應某些狀況 04/29 10:32
→ hilorrk:但不表示你可以去修改這個值..改了會發生什麼事我也不知道 04/29 10:32
→ spider391:上面網站上有個說法,我覺得還不錯可以參考 04/29 10:51
> -------------------------------------------------------------------------- <
作者: spider391 (小乖) 看板: C_and_CPP
標題: Re: [問題] 修改 const int x = 100;
時間: Thu Apr 29 11:01:35 2010
感謝 h 大:
以下是標準規格書的說法
ISO 14882:2003 says in paragraph 7.1.5.1/4:
"Except that any class member declared mutable (7.1.1) can be modified, any
attempt to modify a const object during its lifetime (3.8) results in
undefined behavior."
所以結論就是:
Do not cast pointers to constants to pointers to variables.
: ==============================
: #include <iostream>
: using namespace std;
: int main()
: {
: const int x = 100;
: int* py = const_cast<int*>(&x);
: *py = 9;
: cout << "(addr,value) of x ==> " << "(" << hex << &x << "," << dec << x <<
: ")" << endl;
: cout << "(addr,value) of *py ==> " << "(" << hex << py << "," << dec << *py
: << ")" << endl;
: return 0;
: }
: ===============================
: 是不是 C++ 的標準規格又多了甚麼限制嗎? 還是甚麼原因
: 請教各位 謝謝 @@")
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.216.170.154