gpt4 book ai didi

c++ - 初始化类中的常量

转载 作者:行者123 更新时间:2023-11-28 04:40:49 25 4
gpt4 key购买 nike

我创建了一个简单的类来计算矩形的面积。

class Rectangle
{
public:
Rectangle();
Rectangle(const double, const double);

class Invalid { };

double print_square();
private:
const double length, width;
inline bool check();
};

对于宽度和长度,我使用了常量,因为它们在我的类中不会被修改。在构造函数中,我想初始化它们。

为什么我在构造函数主体中出现错误?

Cannot assign to non-static data member 'length' with const-qualified type 'const double'

Constructor for 'Rectangle' must explicitly initialize the const member 'length'

错误:

Rectangle::Rectangle(const double _length, const double _width)
{
length = _length;
width = _width;
if (!check())
throw Invalid();
}

确定:

Rectangle::Rectangle(const double _length, const double _width) : length(_length), width(_width)
{
if (!check())
throw Invalid();
}

我很喜欢第二个选项,但为了更方便的可读性,我不想在一行中写所有的初始化变量。

有没有办法在构造函数的主体中初始化常量?

最佳答案

不,你不能。

这是因为在您的第一个示例中,由于初始化列表中没有任何内容,lengthwidth 将被默认构造,然后,在构造函数的主体中,分配了所需的值 _length_width,但失败了,因为它们是 const 并且已经初始化。

在您的第二个示例中,两个变量都在没有默认构造的情况下进行了初始化。这种方法在一个步骤中直接使用所需的值构造 const 变量。

请注意,方法 2 只使用一个步骤而不是两个步骤,因此它比您在方法 1 中想要执行的操作更有效。因此,它通常是一种很好的做法(即使对于非const 变量)尽可能采用方法 2。

关于c++ - 初始化类中的常量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50200553/

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