默认初始化和值初始化之间的区别
Difference between default-initialize and value-initialize?
可能的重复项:
以下短语在C++中是什么意思:零初始化、默认值初始化和值初始化?
我正在阅读这个答案,所以我遇到了第二个词:value-initialize
。最初我认为这与default-initialize
相同,但上下文暗示我错了。
所以我的问题是:
默认初始化和值初始化有什么区别?
我想通过一些例子来了解其中的区别。
根据标准 (8.5/4,5(:
默认初始化对象 T型表示:
— 如果 T 是非 POD 类类型 的默认构造函数 调用 T(初始化为 如果 T 没有可访问性,则格式不正确 默认构造函数(;
— 如果 T 是 数组类型,每个元素都是 默认初始化;
— 否则, 对象为零初始化。
对对象进行值初始化 T型表示:
— 如果 T 是类类型 (第9条(与用户声明 构造函数 (12.1(,然后是默认值 T 的构造函数称为(和 如果 T 具有 没有可访问的默认构造函数(;
— 如果 T 是没有 一个用户声明的构造函数,然后 每个非静态数据成员和 T 的基类分量是 值初始化;96(
— 如果 T 是 数组类型,则每个元素为 值初始化;
— 否则, 对象为零初始化
"default-initialise" 给它标准指定的默认值,这可能是垃圾。
"value-initialise"将其初始化为特定值 - 例如,在构造函数中设置的值,或由编译器优化的值。
相关文章:
- 为什么这里的大括号和括号初始化有区别?
- p_threads初始化中向量和数组之间的区别
- 这些初始化之间有什么区别?
- 两种初始化有什么区别:Foo f();Foo f = Foo()
- 在C++中初始化带有和不使用构造函数调用的对象有什么区别
- 初始化的多维数组,用声明初始化和声明后初始化有什么区别
- 这些在C 中初始化C数组的方式之间有区别吗?
- 在 C++ 中,字符串的这两种不同初始化有什么区别?
- 初始化空字符串的 " " 和 {} 有什么区别?
- 这两个初始化之间有什么区别
- 在 C++ 中:在函数中初始化变量与在函数标头中声明变量有什么区别?
- 数组和单独初始化之间的区别
- 这两种初始化成员变量的方法之间有区别吗?
- C++函数声明和对象初始化之间的区别
- 初始化 stringstream.str( a_value ) 和 stringstream << a_value 之间的区别
- 复制列表初始化和传统复制初始化之间的任何区别
- C 和C++静态初始化之间的区别
- {x} 和 '= {x}' 初始化之间有什么区别(如果有的话)?
- std::map 的这两种列表初始化形式有什么区别
- 从初始化构造函数和赋值运算符创建的对象有什么区别