看板 C_and_CPP 關於我們 聯絡資訊
開發平台(Platform): (Ex: Win10, Linux, ...) Linux 編譯器(Ex: GCC, clang, VC++...)+目標環境(跟開發平台不同的話需列出) GCC 5.4 問題(Question): 昨天碰到的奇妙問題: #include<iostream> #include<string> using namespace std; int main() { //string str("aaa"); const char* x = string("111").c_str(); const char* y = string("222").c_str(); cout << x << "\n"; // 222(第一行不註解的話會是111) cout << y << "\n"; // 222 } 上面程式碼x和y的輸出都是222 是因為等號右邊都是string物件的rvalue 所以第二個就直接覆蓋掉第一個嗎? 但如果按照這樣解釋 為什麼前面隨便加個其他的string(第一行不註解的話) x的輸出結果就變正常的111了? 目前搜了一下沒找到答案 感謝解答 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.112.30.51 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1536910208.A.2E4.html
bluesoul: string是temporary object 09/14 15:35
notBeing: temporary object 在生命週期之後,其內容值是什麼都可 09/14 15:36
notBeing: 以阿 09/14 15:36
KaryuuIssen: soga 就看編譯器怎麼搞都行是吧 09/14 15:49
nicknick0630: 你的x和y之後都會指向一塊被回收的記憶體 09/14 16:15
KaryuuIssen: 恩 想想其實就是dangling pointer 值不可預期 09/14 16:31
eye5002003: 可以理解之前為何有人希望C++把裸指標封掉了,就是有人 09/14 17:33
eye5002003: 會亂用,這根本不是C++的錯 09/14 17:36
ggBird: 有必要噓嗎? 09/14 19:28
eye5002003: 噓只是代表個人不喜歡而已,很嚴重嗎? 09/14 20:29
school4303: 很多人對推噓很在乎 09/15 06:16
school4303: 雖然我覺得根本沒差XD 09/15 06:16