调整构造函数中的字符串成员大小

时间:2016-09-02 15:55:50

标签: c++ string c++11 constructor

我确保在施工期间弦线构件的尺寸固定。但是,他们可以在构建完成后增加它们的大小,然后在程序中,用户选择添加更多文本。

class A {
    std::string name;
    std::string desc;
    int num;

  public:
    A(int, std::string, std::string);
    .....
}

现在,如果我这样做 -

A(int n, std::string name, std::string d) : 
    num(n),
    name(name),
    desc(d) 
{
    ....
}

我必须在构造函数体内调用resize()。这意味着在构造期间的某个时间存在完整的弦长。让我们说我希望初始大小为5,并且用户传递20个字符串,在构造期间和resize()之前,字符串将包含20个字符,对吗?

现在我正在考虑这样做 -

A(int n, std::string name, std::string d) : 
    num(n)
{
    name = name;
    desc = d;
    name.resize(5);
    desc.resize(5);
    ....
}

但这会是一样的吗?

我应该在传递的参数本身上调用resize()吗?还是有更好的方法..

2 个答案:

答案 0 :(得分:8)

这样的构造函数怎么样:

A::A(int n, const std::string &name, const std::string &d) :
    n(n), name(name, 0, 5), d(d, 0, 5)
{
}

永远不会复制字符串的全长。它们通过引用获取,副本最多使用前5个字符构建。

它使用substring constructor(数字3)。

答案 1 :(得分:2)

您可以执行以下操作

class A 
{
private:    
    int num;
    std::string name;
    std::string desc;
    static const size_t INITIAL_SIZE = 5;
public:
    A( int num, const std::string &name, const std::string &desc )
        : num( num ), 
          name( name.substr( 0, INITIAL_SIZE ) ), 
          desc( desc.substr( 0, INITIAL_SIZE ) )
    {
        //
    }       
};