连接字符串文字上的 c_str() 是否安全?

Is c_str() on a concatenated string literal safe?

我从 this answer 得知字符串文字是静态分配的。但是下面的字符串连接也可以安全使用吗?

void someFunction(std::string& foo) {
    functionTakingCString(("start " + foo + " end").c_str());
}

跟进问题:如评论中所述,当 functionTakingCString 存储该指针时,这确实不安全。在这种情况下,以下是否有效:

void someFunction(std::string& foo) {
    std::string bar = "start " + foo + " end";
    functionTakingCString(bar.c_str());
}

连接的字符串仅在 functionTakingCString(("start " + foo + " end").c_str()); 为 运行 时分配。然后内存被释放,该指针不再安全使用,因为您可以读取 here。如果该指针被传递给在 functionTakingCString 退出后运行的任何东西,那么您将遇到麻烦。