我从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());
}
答案 0 :(得分:3)
仅在functionTakingCString(("start " + foo + " end").c_str());
运行时分配连接字符串。然后释放内存并且指针不再安全,因为您可以阅读here。如果该指针传递给functionTakingCString
退出后运行的任何内容,那么您将遇到麻烦。