C++ QString到std::string到const char*转换在赋值中不起作用

C++ QString到std::string到const char*转换在赋值中不起作用,c++,qstring,C++,Qstring,此代码: std::string a("TEST1"); const char* a_c = a.c_str(); QString b("TEST2"); const char* b_c = b.toStdString().c_str(); std::string s1 = std::string("A: ") + a.c_str(); std::string s2 = std::string("A: ") + a_c; std::string s3 = std::string("B: ")

此代码:

std::string a("TEST1");
const char* a_c = a.c_str();
QString b("TEST2");
const char* b_c = b.toStdString().c_str();

std::string s1 = std::string("A: ") + a.c_str();
std::string s2 = std::string("A: ") + a_c;
std::string s3 = std::string("B: ") + b.toStdString().c_str();
std::string s4 = std::string("B: ") + b_c;

std::cout << s1 << std::endl;
std::cout << s2 << std::endl;
std::cout << s3 << std::endl;
std::cout << s4 << std::endl;

我不知道上一次会议发生了什么。(显然,我可以直接打印
std::string
,但这段代码是一个更大项目的示例,我需要C样式的字符串)

在写问题时,我发现了一个小错误:在这一行之后

const char* b_c = b.toStdString().c_str();
b.toStdString()
返回的
std::string
不再存在,因此调用了析构函数,
b_c
指针不再有效。相反

std::string("B: ") + b.toStdString().c_str();
将连接的值复制到新字符串中,因此
b.toStdString()
的无效性不再是问题

显然
a_c
不是问题,因为
a
永远不会被销毁

std::string("B: ") + b.toStdString().c_str();