【发布时间】:2021-04-15 09:43:33
【问题描述】:
我经常看到构造函数参数与类成员同名的代码示例。编译器如何区分函数参数名称和类成员名称?这是可移植的代码吗?这是不好的做法吗?
例子:
class Box
{
public:
Box(unsigned length, unsigned width, unsigned height)
: length(length), width(width), height(height)
{
std::clog << length << std::endl;
std::clog << width << std::endl;
std::clog << height << std::endl;
}
private:
unsigned length, width, height;
};
【问题讨论】:
-
“这是不好的做法吗?” 这是基于意见的。我曾在这是常见做法的团队和不允许这样做的团队中工作。 “这是可移植的代码吗?” 是的,行为定义和指定良好。 “编译器如何区分函数参数名称和类成员名称?” 这就是所谓的遮蔽。论点影响了成员。但是有一个特殊的规则成员初始化列表,因为你可以初始化成员。
-
恕我直言,在不需要的时候不要浪费名称是一种很好的做法(考虑到所有需要名称的东西,都需要一个好名称,即给出名称是有代价的),并且成员初始化列表是保存一些名字的好地方。虽然我只在身体空的时候使用它。在正文中有调试输出有点在边界。无论如何,好的做法是否完全基于意见
标签: c++ constructor scope