我正在阅读有关初始化这里的内容,它讨论了不同类型的初始化,演示了其中a是一个任意变量(每个变量具有不同的语法):
TT{}T(a)T val = aT{...}T{...}T &ref = aT{}static T &ref = a复制构造函数可以通过复制初始化来使用,但是复制初始化与复制构造函数不一样。(对吧?)这使我想知道以下几点:
某些类型的初始化语法重叠,例如值初始化和零初始化都使用相似的语法,聚合初始化和列表初始化具有相似的语法等等。
问题:,这是否意味着某些类型的初始化是从其他类型派生出来的?例如,当满足特定情况时,从值初始化派生的零初始化,以及聚合初始化是列表初始化的一种形式,因为所有这些都具有类似的语法。
如果没有,那么初始化类型发生的优先级和顺序是什么?
发布于 2017-09-18 01:35:57
按类别的顺序排列:
int) )具有一个值,而不像默认初始化(未初始化它们)。使类类型具有这种行为是可能的,这是非常有效的(如果对假定默认构造函数告诉整个故事的人来说有些困惑的话)。char foo[2]="";的特例,因为它没有包含在通常的列表初始化规则中)。发布于 2017-09-18 00:33:40
复制构造函数可以通过复制初始化来使用,但是复制初始化与复制构造函数不一样。(对吧?)
这类似于“函数可以用于函数调用,但是函数与函数调用不一样。(对吗?)”。事实上,它们是分开的,但却是相关的概念。
问:这是否意味着某些类型的初始化是从其他类型派生出来的?
你所说的“来自他人的衍生品”是什么意思,目前还不清楚。当然,在某些值初始化情况下,将执行零初始化。但是,没有在所有值初始化中执行零初始化(例如,当类具有用户定义的构造函数时)。此外,在没有值初始化的情况下,执行零初始化(例如,静态存储持续时间的变量在任何其他初始化(如果有的话)之前初始化为零)。
您所链接的站点对执行每个可能的初始化的情况有相当详细的描述。权威描述可以在C++标准文档中找到。
https://stackoverflow.com/questions/46269972
复制相似问题