※ 引述《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了?
: 目前搜了一下沒找到答案
: 感謝解答