首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >您用什么方法初始化成员变量?

您用什么方法初始化成员变量?
EN

Stack Overflow用户
提问于 2015-08-13 18:03:24
回答 2查看 92关注 0票数 1

假设我有一个类Foo,其中有一个成员变量,它是浮点数的std::vectorbar。然后,我创建了一个Foo实例,称为foo。假设在程序运行之前我不知道bar的长度,但是在调用foo的构造函数时,我知道它的长度应该是x

我可以想出三种方法来初始化bar的长度,我只是想知道大多数人倾向于使用哪一种。我已经按照我认为是“最佳实践”的方法对它们进行了排序,但我更好奇人们在实践中“实际使用”了什么方法。有时,我使用的方法使代码更清晰地遵循,而不一定遵循最佳实践.

  1. bar是一个私有成员,我在foo's构造函数期间调整了它的大小,例如Foo foo(x){bar.resize(x)};
  2. bar是一个私有成员,我称之为foo.ResizeBar(x),它在创建foo之后在内部调整bar大小。
  3. bar是一个公共成员,我在创建foo之后调用foo.bar.resize(x)

或者,在代码中:

1.

代码语言:javascript
运行
复制
class Foo
{
private:
    std::vector<float> bar;
public:
    Foo(int x)
    {
        bar.resize(x);
    };
};

int main()
{
    Foo foo(100);
    return 0;
}

2.

代码语言:javascript
运行
复制
class Foo
{
private:
    std::vector<float> bar;
public:
    Foo()
    {
    };
    void ResizeBar(int x)
    {
        bar.resize(x);
    };
};

int main()
{
    Foo foo;
    foo.ResizeBar(100);
    return 0;
}

3.

代码语言:javascript
运行
复制
class Foo
{
public:
    std::vector<float> bar;
    Foo()
    {
    };
};

int main()
{
    Foo foo;
    foo.bar.resize(100);
    return 0;
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-08-13 18:09:10

所有这三种方法的问题是,您没有必要为您的向量调用默认的初始化器,然后修改已经初始化的向量以满足您的需要。

您应该使用初始化程序列表调用正确的初始化程序:

代码语言:javascript
运行
复制
Foo::Foo(std::size_t x) : bar(x, 0) { }
票数 7
EN

Stack Overflow用户

发布于 2015-08-13 18:08:09

最好的方法不是在您发布的选项列表中。最好的方法是使用bar初始化成员初始化程序列表

代码语言:javascript
运行
复制
Foo::Foo(int x) : bar(x) {}
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31995403

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档