我确保在施工期间弦线构件的尺寸固定。但是,他们可以在构建完成后增加它们的大小,然后在程序中,用户选择添加更多文本。
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()
吗?还是有更好的方法..
答案 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 ) )
{
//
}
};