繁体   English   中英

构造函数初始化器列表与头文件中的初始化

[英]Constructor initializer list vs initializing in the header file

在代码库中,我正在使用数十个标头初始化变量:

bool toBeTrue = true;
int var = 1;

如果未在头文件中初始化它们,则在构造函数的主体中初始化它们:

MyClass::MyClass()
{
 variable1 = 10;
 boolean2 = false;
};

是否初始化变量在头文件(也许有initialzed为指针nullptrbooleans和简单的ints头文件有意义?)使编译时间慢? 并将所有变量初始化移动到构造函数的初始化列表中会使编译时间更快吗?

这个:

MyClass::MyClass()
{
 variable1 = 10;
 boolean2 = false;
};

不是初始化! 成员将在构造函数的主体运行之前被初始化,然后您要分配值。 您的意思可能是

初始化列表

MyClass::MyClass() : variable1(10), boolean2(false) {}

并在标头中的类初始化(我相信自C ++ 11起可用)中:

struct MyClass {
     int variable1 = 10;
     boolean2 = false;
};

在最后两种情况下,这些值都用于初始化成员,因此速度没有差异。 但是,在第一种情况下,您所做的事情超出了您实际想要的(初始化+赋值),因此,如果可能,应该避免这样做。

类内初始化和初始化列表之间的细微差别是(参见例如此处

variable1 = 10; 

可能涉及副本。 这可以通过使用直接列表初始化来避免:

 struct MyClass {
     int variable1{10};
     bool boolean2{false};
};

但是,对于intbool这没有任何区别。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM