从一个char中创建std :: string的最佳方法是什么?

时间:2017-01-16 15:54:48

标签: c++ c++11

有很多方法可以从一个char创建一个std :: string。

  • std::string(1, ch)
  • std::string() + ch
  • std::string(&ch, 1)
  • std::string {ch} \\ c++11

我想知道我应该选择哪一个。

2 个答案:

答案 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);
}