[問題] string和c_str()的奇怪輸出

作者: KaryuuIssen (一閃)   2018-09-14 15:30:03
開發平台(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了?
目前搜了一下沒找到答案
感謝解答
作者: bluesoul (忙死你老爸)   2018-09-14 15:35:00
string是temporary object
作者: notBeing (read and be read)   2018-09-14 15:36:00
temporary object 在生命週期之後,其內容值是什麼都可以阿
作者: KaryuuIssen (一閃)   2018-09-14 15:49:00
soga 就看編譯器怎麼搞都行是吧
作者: nicknick0630 (NICK)   2018-09-14 16:15:00
你的x和y之後都會指向一塊被回收的記憶體
作者: KaryuuIssen (一閃)   2018-09-14 16:31:00
恩 想想其實就是dangling pointer 值不可預期
作者: eye5002003 (下一夜)   2018-09-14 17:33:00
可以理解之前為何有人希望C++把裸指標封掉了,就是有人會亂用,這根本不是C++的錯
作者: ggBird (ggBird)   2018-09-14 19:28:00
有必要噓嗎?
作者: eye5002003 (下一夜)   2018-09-14 20:29:00
噓只是代表個人不喜歡而已,很嚴重嗎?
作者: school4303 (某爬蟲類)   2018-09-15 06:16:00
很多人對推噓很在乎雖然我覺得根本沒差XD

Links booklink

Contact Us: admin [ a t ] ucptt.com