c++标准规定,函数的返回值会在当前行结束后结束生命周期,所以后面再使用c_str()返回的指针时,string的生命周期已经结束了,指针指向的是野指针。不过在有些编译环境下,这个生命周期的结束会延后。
#include <string> #include <iostream> auto foo() { return std::string{"ff"}; } int main() { const char *op; if(auto p = foo().c_str()) { std::cout << p << std::endl; op = p; } std::cout << op << std::endl; }
https://en.cppreference.com/w/cpp/language/copy_elision