我测试了这段代码:
#include <iostream>
#include <cstdio>
#include <string>
using namespace std;
int main()
{
string s1("a"),s2("b");
const char * s = (s1+s2).c_str();
printf("%s\n",s);
}
Run Code Online (Sandbox Code Playgroud)
它返回"ab".
据我所知,因为它(s1 +s2)是一个临时对象,可能会以某种方式消失(我不知道),然后const char * s可能指向未定义的内存并可能被转储.
那么使用.c_str()那样安全吗?
这更像是一个政策或历史问题.为什么决定不为std :: string提供const char*转换?有人害怕有人可能会做printf("%s",s)并相信它会自动转换吗?关于这个问题有没有公开讨论?