1
我從this answer知道字符串文字是靜態分配的。但是下面的字符串連接也可以安全使用嗎?連接字符串文字上的c_str()是否安全?
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'不存儲該指針,並且有東西試圖在臨時'std :: string'的生命週期之外使用它。 – LogicStuff
感謝您的評論 - 我添加了一個關於您的建議的後續問題 – PhilLab
'bar's的生命無論如何都會在'}'處結束,所以它在您的示例中基本上是相同的問題。 – Default