gpt4 book ai didi

c++ - 基本类型是如何初始化的?

转载 作者:搜寻专家 更新时间:2023-10-31 02:07:54 24 4
gpt4 key购买 nike

基本类型(例如整数)是如何初始化的?您是否同时具有移动和复制语义,并且它们实际上具有构造函数吗?当遇到以下有关直接初始化的问题时,我感到困惑:

Otherwise, standard conversions are used, if necessary, to convert the value of other to the cv-unqualified version of T, and the initial value of the object being initialized is the (possibly converted) value.

只说了被初始化对象的初值就是值,并没有说这是怎么做到的。是否调用了一些构造函数,是否移动了一些内存或者会发生什么?

是否有详细说明如何根据上下文完成基本类型的初始化?我在标准中找不到它。

最佳答案

原始类型总是被复制,因为没有什么可移动的,尽管它们可以在移动语义中使用。移动语义最初是为了让容器避免在数据转换完成后源对象将被销毁时进行不必要的数据复制。原始类型不是容器,您实际上不能“转移数据所有权并将原始容器留空”,因此没有什么可移动的。如果您检查任何编译器生成的汇编代码,您会看到“移动”实际上是一条 mov 指令,这意味着数据只是从一个寄存器复制到另一个寄存器,或在内存和注册表之间复制。由于架构的原因,这种行为在大多数现代 CPU 中基本相同。

它们没有构造函数或析构函数,因为它们不是类的实例,尽管它们的行为就像它们具有虚拟类一样。

它们的初始状态,当第一次定义时没有被初始化,无论是显式还是隐式1,都是“不确定的”。你不知道它们的值是多少,或者它是否是 trap representation .您甚至不能对不确定值 including assuming that x == x is true 做任何事情,这是没有必要的。所以最后,原始类型的未初始化变量是无用的(unsigned char 或任何无符号 1 字节整数等效类型除外)。

1。一个非常简单的隐式初始化是当你在文件范围内定义一个变量时,它会自动被零初始化。或者当您定义具有相同效果的静态变量时。

关于c++ - 基本类型是如何初始化的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48230326/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com