Я попытался найти некоторую информацию об оптимизации именованного возвращаемого значения (NVRO) std::string. Я даже не уверен, применимо ли это, но мне интересно, что было бы лучше как с точки зрения читабельности, так и с точки зрения производительности.
std::string first(const bool condition)
{
std::string info = "This";
info += condition
? " is"
: " irrelevant"; //.append()
info += " info.";
return info; // nrvo here?
}
std::string second(const bool condition)
{
const auto firstPart = "First part";
const auto anotherPart = condition
? " second part"
: " irrelevant "; //.append()
return std::string{}.append(firstPart).append(anotherPart);
}
std::string third(const bool condition)
{
//would avoid due to poor readability if strings are long
return std::string{}
.append("First part")
.append(condition ? " second" : "irrelevant");
}
int main()
{
// printf("Hello World");
const auto irrelevant {true};
std::cout<<first(irrelevant)<<std::endl;
std::cout<<second(irrelevant)<<std::endl;
std::cout<<third(irrelevant)<<std::endl;
return 0;
}
Как в комментариях:
Будет ли нвро исполняться во "фристе"?
Есть ли лучший (более чистый/производительный) способ решения этой проблемы?
Мое намерение состоит в том, чтобы создать вспомогательную функцию, которая будет объединять правильную строку на основе заданного параметра.