有很多方法可以从一个char创建一个std :: string。
std::string(1, ch)
std::string() + ch
std::string(&ch, 1)
std::string {ch} \\ c++11
我想知道我应该选择哪一个。
答案 0 :(得分:18)
请记住,源代码与读者沟通,而不是主要与编译器沟通。
因此,您应该努力澄清,并且主要是将优化留给编译器。
因此,作为一个不涉及无关问题的表达,因此最清楚地传达意图,std::string{ ch }
更可取。
答案 1 :(得分:1)
"一张图片说了千言万语,正如一句话所说的那样。
c ++等价物可能是"界面声明应该是图片"。
我们可以创建一个非常轻量级的功能,几乎可以肯定地在任何地方使用它,不增加任何开销并讲述完整的故事:
namespace notstd {
using std::to_string;
// interface conveys all the information we need.
inline std::string to_string(char c)
{
// implementation is not actually that important
return { c };
}
}
然后用例成为自解释代码:
auto s = notstd::to_string('c');
它可以在template-land中使用:
template<class T>
doSomething(T const& v)
{
using notstd::to_string;
auto s = to_string(v); // will also use ADL when necessary
somethingElse(s);
}