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