[问题] 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