作者KaryuuIssen (一闪)
看板C_and_CPP
标题[问题] string和c_str()的奇怪输出
时间Fri Sep 14 15:30:03 2018
开发平台(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了?
目前搜了一下没找到答案
感谢解答
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 140.112.30.51
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1536910208.A.2E4.html
1F:→ bluesoul: string是temporary object 09/14 15:35
2F:→ notBeing: temporary object 在生命周期之後,其内容值是什麽都可 09/14 15:36
3F:→ notBeing: 以阿 09/14 15:36
4F:→ KaryuuIssen: soga 就看编译器怎麽搞都行是吧 09/14 15:49
5F:推 nicknick0630: 你的x和y之後都会指向一块被回收的记忆体 09/14 16:15
6F:→ KaryuuIssen: 恩 想想其实就是dangling pointer 值不可预期 09/14 16:31
7F:嘘 eye5002003: 可以理解之前为何有人希望C++把裸指标封掉了,就是有人 09/14 17:33
8F:→ eye5002003: 会乱用,这根本不是C++的错 09/14 17:36
9F:推 ggBird: 有必要嘘吗? 09/14 19:28
10F:→ eye5002003: 嘘只是代表个人不喜欢而已,很严重吗? 09/14 20:29
11F:推 school4303: 很多人对推嘘很在乎 09/15 06:16
12F:→ school4303: 虽然我觉得根本没差XD 09/15 06:16