首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >默认初始化和值初始化之间的歧义

默认初始化和值初始化之间的歧义
EN

Stack Overflow用户
提问于 2019-06-27 00:31:56
回答 1查看 104关注 0票数 7

我发现很多文章解释了“默认初始化和值初始化”之间的区别,但实际上我并不清楚。

下面是一个例子:

代码语言:javascript
复制
class A{
   public:
      int x;
};


int main(){
    A a;// default initialization so x has undefined value.
    A b = A(); // value initialization so x is a scalar thus it is value initialized to 0

}

正如我所猜的那样,上面是可以的,但是这里:

代码语言:javascript
复制
int value = 4; // is this considered a value-initialization?

请帮助我理解这两种初始化形式的主要区别。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-27 01:22:38

A a;默认初始化,因为A的默认构造函数用于初始化。由于隐式生成的默认构造函数 of A什么也不做,所以a.x具有不定值。

A()值初始化

如果T是一个类类型,它的默认构造函数既不是用户提供的,也不是删除的(也就是说,它可以是一个具有隐式定义的或默认的默认构造函数的类),那么对象是零初始化,如果它有一个非平凡的默认构造函数,那么它就是默认初始化

注意与默认初始化不同的是,A有一个隐式定义的默认构造函数,对象是零初始化;因此,临时对象A()的data x将初始化为0

A b = A();复制初始化,在概念上,b是从临时对象A()初始化的,因此b.x也将初始化为0。请注意,由于复制省略,因为C++17 b保证直接为值初始化;所以省略了复制/移动构造。

int value = 4;也是复制初始化value将初始化为4

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56782494

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档