在定义类时分配类变量与在类构造函数中分配类变量有什么区别?所有类实例都可以访问类定义中分配的变量吗?
实例化时的分配示例:
class Foo
{
private:
int x;
double y;
public:
Foo()
{
x = 0;
y = 1.;
}
};
类定义中的赋值示例:
class Foo
{
private:
int x = 0;
double y = 1.;
public:
Foo();
};
编辑:关于所有实例都可以访问的类成员,我想我在寻找static声明的概念,我想这只是花括号语言的新手。
在这个代码片段中
int x = 0;
double y = 1.;
没有作业。存在初始化。
在这个代码片段
Foo()
{
x = 0;
y = 1.;
}
确实使用了赋值运算符。
通常,对于复杂类型的对象,它可能是1(不可能的(默认构造函数或赋值运算符不可用(或2(需要许多资源,因为首先调用创建对象的默认构造函数,然后调用赋值运算符。
至少像一样定义构造函数是可取的
Foo() : x( 0 ), y( 1 )
{
}
使用mem初始值设定项列表。
类定义中分配的变量是否可由所有类实例访问?
不!
不同之处在于,在第一种情况下,您默认初始化成员变量,然后为它们赋值。在第二种情况下,您对它们进行初始化,这是首选。第三个选项,也是值初始化它们,是使用成员初始化器列表:
class Foo
{
private:
int x;
double y;
public:
Foo() : x{0}, y{1.}
{
}
};