char
配列、char
、std::string
の任意の組み合わせを連結する関数を書きました。メモリ確保を一回だけします。
#include <string> #include <cstring> #include <utility> std::size_t string_length(const std::string& s) noexcept { return s.size(); } std::size_t string_length(const char* s) noexcept { return std::strlen(s); } std::size_t string_length(char) noexcept { return 1; } template <class... Strings> std::string concat_string(Strings&&... strs) { std::string result; std::size_t length = (string_length(strs) + ...); result.reserve(length); ((result += std::move(strs)), ...); return result; } #include <iostream> int main() { std::string result = concat_string("Hello", ' ', std::string("World")); std::cout << result << std::endl; }
出力:
Hello World