【问题标题】:initialize a string size during declaration在声明期间初始化字符串大小
【发布时间】:2017-09-22 01:09:31
【问题描述】:

假设我有一个像这样的类,我想创建一个带有 具体容量。我尝试执行以下操作,但没有奏效。 有什么建议么 ?我知道我可以在构造函数中执行此操作,但如果可能,我希望在声明期间执行此操作。

class foo
{
 std::string bar = std::string().resize(45);
}

我得到了错误

main.cpp:在函数“int main()”中: main.cpp:8:46:错误:请求从“void”转换为非标量类型“std::__cxx11::string {aka std::__cxx11::basic_string}” std::string test = std::string().resize(45);

【问题讨论】:

    标签: c++11


    【解决方案1】:

    在 C++ 中,您可能不希望“链接”方法,除非之前的方法具有正确的返回类型。

    正如@James Maa 所建议的,您可以简单地使用构造函数。

    【讨论】:

      【解决方案2】:

      在 c++11 中,我们有一个名为 move constructor 的新特性

      string str = string(); 
      

      不会造成额外的时间。

      http://en.cppreference.com/w/cpp/language/move_constructor

      使用move构造函数,程序将直接使用=符号后的临时构造字符串的地址,而不进行复制。

      问题是c++中的resize()function实际上返回void


      basic_string( size_type count, 
                    CharT ch, 
                    const Allocator& alloc = Allocator() );
      

      这个构造函数可能是你直接感兴趣的东西。

      你可以用

      std::string str(45, ' ');
      

      【讨论】:

      • 你应该提到你引用的构造函数不仅仅是分配。 (诚​​然,调整大小也是如此。)
      猜你喜欢
      • 1970-01-01
      • 2011-07-12
      • 2013-10-22
      • 1970-01-01
      • 1970-01-01
      • 2011-05-02
      • 1970-01-01
      • 2013-10-29
      相关资源
      最近更新 更多