看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《KaryuuIssen (一閃)》之銘言: : 開發平台(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(); 這裡產生一個暫時物件叫他 tmp_x 好了, tmp_x 的生命很短, 是個短命鬼, 當這行結束之後, 這個 tmp_x 就不存在了。 所以你的指標 x 指向一個已經不存在的 tmp_x, 自然是任何事情都有可能發生了。 : 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), 來自: 101.9.146.158 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1536931905.A.09C.html
cutekid: 推(Y) 09/15 00:31