原始(标量)类型的差异复制初始化和直接初始化

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 类型并且所有都是语法糖,则没有区别。类似的问题并不能完全为我解释。

像这样的原始标量没有区别;内存位置或寄存器(取决于用途)将以相同的方式初始化。