[英]what's the difference between these two different initialization for a string in c++?
[英]Two different variable initializations in a C++ Class. What's the difference?
我是一个自学的初学者,所以我想我会问一些非常基本的问题,但是,我忽略了。
假设您在 C++ 中有一个名为aClass
的类,并且其中一个构造函数需要一个参数。 这两种方法有什么区别?
第一:
aClass::aClass(int aVariable) : privateVariable(aVariable) {}
第二:
aClass::aClass(int aVariable) {
privateVariable = aVariable;
}
如果它们基本相同,那么两者中哪一个更常见? 或者,出于什么原因人们倾向于使用而不是另一个?
谢谢!
第一个进行初始化,应该是首选。
第二个进行赋值(在默认初始化之后)。 它主要相当于:
aClass::aClass(int aVariable) : privateVariable() {
privateVariable = aVariable;
}
因此,如果privateVariable
不是默认可构造的,则privateVariable
。
即使这已经有一个公认的答案,让我们详细说明一下。
让我们举一个例子,其中一个有效,另一个无效:
class Foo
{
public:
Foo(int value);
private:
Foo();
int content;
};
class Bar
{
public:
Bar(int value);
private:
Foo foo;
};
构造函数的工作实现将是
Bar::Bar(int value) : foo(value) {}
但是,如果你想
Bar::Bar(int value)
{
foo = Foo(value);
}
会发生的是这不会编译。 作为演示,我创建了http://cpp.sh/2vfwqk ,看看如果您尝试运行它会发生什么。 然后取消注释较低的实现并取消注释上面的实现。
问题是,必须先调用Foo()
才能开始处理主体,因为foo
需要初始化。
初始化列表直接执行此操作。
(如果我完全省略了空构造函数而不是将它设为私有,则该示例也可以工作,但这样更容易理解。)
另一件事是,如果Foo()
是公共的,它将构造两个对象。 如果这些是轻量级的,没问题,但如果空构造函数需要大量内存或时间,则不可取。
对于作为参考的成员,您非常需要它。
也许值得一读: https : //www.geeksforgeeks.org/when-do-we-use-initializer-list-in-c/
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.