Из этого ответа я знаю, что строковые литералы выделяются статически. Но безопасно ли использовать следующую конкатенацию строк?
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
. - person LogicStuff   schedule 19.01.2016bar
s в любом случае закончится на}
, поэтому в ваших примерах это в основном та же проблема. - person Default   schedule 19.01.2016