gpt4 book ai didi

带有表达式的 C++ 初始化列表

转载 作者:搜寻专家 更新时间:2023-10-31 02:07:33 24 4
gpt4 key购买 nike

我刚刚了解到我应该在我的 C++ 构造函数中使用初始化列表而不是赋值。这是我的例子。

**赋值示例:**

Class Graph {
private:
int count;
int spacing;
int width;

public:
Graph(int _count, int _spacing, int _chart_width) {
count = _count;
spacing = _spacing;
width = (_chart_width - ((_count - 1) * _spacing)) / _count;
}
};

**初始化列表示例:**

Class Graph {
private:
int count;
int spacing;
int width;

public:
Graph(int _count, int _spacing, int _chart_width) : count(_count), spacing(_spacing), width((_chart_width - ((_count - 1) * _spacing)) / _count) {}
};

如您所见,这看起来真的很难看。

我的问题是:

  1. 这是用表达式编写初始化列表构造函数的方法吗?
  2. 有更好的语法吗?如果表达式真的很长并且使初始化列表语法完全不可读怎么办?
  3. 我是否应该编写一个方法 getWidth() 来计算 width 并清理构造函数?类似于 width(getWidth(_chart_width))
  4. 初始化列表语法表明,例如,count(_count) 是一个将_count 作为输入参数的函数。我是否将初始化列表语法与函数语法混淆了?还是 count() 真的是一个函数?这非常令人困惑。
  5. 如果我编写初始化列表的方式是正确的,您能否建议一种更好的方式来格式化代码以提高可读性?我想,我想知道长初始化列表最常见的语法是什么。

最佳答案

不同的项目(和人)有不同的编码标准和品味,但我个人觉得这种格式非常可读:

Class Graph {
private:
int count;
int spacing;
int width;

public:
Graph(int _count, int _spacing, int _chart_width)
: count(_count), spacing(_spacing),
width((_chart_width - ((_count - 1) * _spacing)) / _count)
{}
};

不,这些不一定是函数调用。但它们可以是... 最好的思考方式如下:如果您正在初始化的变量是类的实例,那么您正在调用构造函数来初始化它们。如果您这样看,语法就有意义了。

我会推荐一个辅助函数(作为类的私有(private)方法,也许是静态方法)来计算宽度。

关于带有表达式的 C++ 初始化列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48492827/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com