This question already has answers here:
In this specific case, is there a difference between using a member initializer list and assigning values in a constructor?
(12个答案)
7年前关闭。
我只是浏览Cprogramming.com上的随机页面,并注意到Constructors and Destructors教程/示例页面。他们使用以下方法定义构造函数:
我一直在使用带有魔术
除了明显较小的代码(更少的行数)之外,第一个声明是否还有其他好处?
PS:自从我上次用C++编写东西以来已经有很多年了。 默认构造一个对象,然后为其分配值,然后添加 直接使用该值对其进行初始化。
另外,除了使用成员初始化列表来初始化它们之外,您别无选择地默认构造这些类型,也没有选择
(12个答案)
7年前关闭。
我只是浏览Cprogramming.com上的随机页面,并注意到Constructors and Destructors教程/示例页面。他们使用以下方法定义构造函数:
class String
{
private:
char *str;
int size;
public:
String() : str(NULL), size(0) { } // <- This statement
String(int size) : str(NULL), size(size) { // <- And this one
str = new char[size];
}
}
我一直在使用带有魔术
this
指针的构造函数的老式定义:String() {
this->str = NULL;
this->size = 0;
}
String(int size) {
this->size = size;
this->str = new char[size];
}
除了明显较小的代码(更少的行数)之外,第一个声明是否还有其他好处?
PS:自从我上次用C++编写东西以来已经有很多年了。
最佳答案
这些是constructor initialization lists,对于基本类型,您习惯的形式没有区别,它是基于赋值而不是初始化的。
但是,对于用户定义的类型,以下两者之间在性能(也许还有语义)方面可能有所不同:
另外,除了使用成员初始化列表来初始化它们之外,您别无选择地默认构造这些类型,也没有选择
const
和引用成员,这些必须立即初始化。关于c++ - 此构造函数定义的好处是什么,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16884000/