原始(标量)类型的差异复制初始化和直接初始化
Difference copy-initialization and direct-initialization for primitive (scalar) types
据我了解,在 C++ 中的初始化形式为
T x = a;
调用了复制初始化并在表单中进行了初始化
T x(a);
或
T x{a};
调用了直接初始化。
(T...类型, x...变量名, a...表达式)
对于 class 类型我认为区别很明显(在复制初始化的情况下调用复制构造函数)。
但是如果使用像 int 这样的原始(标量)类型呢?因为 int 类型没有(复制)构造函数,在
的情况下应该调用哪个构造函数
int x = 5; // copy-initialization
所以有区别吗?
int x = 5; // copy-initialization of variable x
int x = {5}; // copy-initialization of variable x
int x(5); // direct-initialization of variable x
int x{5}; // direct-initialization of variable x
这里到底发生了什么?或者如果涉及 primitive/scalar 类型并且所有都是语法糖,则没有区别。类似的问题并不能完全为我解释。
像这样的原始标量没有区别;内存位置或寄存器(取决于用途)将以相同的方式初始化。
据我了解,在 C++ 中的初始化形式为
T x = a;
调用了复制初始化并在表单中进行了初始化
T x(a);
或
T x{a};
调用了直接初始化。
(T...类型, x...变量名, a...表达式)
对于 class 类型我认为区别很明显(在复制初始化的情况下调用复制构造函数)。
但是如果使用像 int 这样的原始(标量)类型呢?因为 int 类型没有(复制)构造函数,在
的情况下应该调用哪个构造函数int x = 5; // copy-initialization
所以有区别吗?
int x = 5; // copy-initialization of variable x
int x = {5}; // copy-initialization of variable x
int x(5); // direct-initialization of variable x
int x{5}; // direct-initialization of variable x
这里到底发生了什么?或者如果涉及 primitive/scalar 类型并且所有都是语法糖,则没有区别。类似的问题并不能完全为我解释。
像这样的原始标量没有区别;内存位置或寄存器(取决于用途)将以相同的方式初始化。