12.6.1 - 显式初始化
struct complex {
complex();
complex(double);
complex(double,double);
};
complex sqrt(complex,complex);
complex g = { 1, 2 }; // construct complex(1, 2)
// using complex(double, double)
// and *copy/move* it into g
Run Code Online (Sandbox Code Playgroud)
8.5初始化器
14 - 表单中发生的初始化
T x = a;以及参数传递,函数返回,抛出异常(15.1),处理异常(15.3)和聚合成员初始化(8.5.1)称为复制初始化.[注意:复制初始化可以调用移动(12.8). - 结束说明]
15 - 表单中发生的初始化
T x(a);
T x{a};以及在新表达式(5.3.4)中,static_cast表达式(5.2.9),函数表示法类型转换(5.2.3)以及基本和成员初始化器(12.6.2)称为直接初始化.
8.5.4列表初始化[dcl.init.list]
1 - 列表初始化是从braced-init-list初始化对象或引用.这样的初始化程序称为初始化程序列表,列表的逗号分隔的初始化程序子句称为初始化程序列表的元素.初始化列表可以为空.列表初始化可以在直接初始化或复制初始化上下文中进行; 列表中的初始化 直接初始化上下文被称为在直接列表初始化和列表初始化拷贝初始化上下文被称为副本列表初始化.
29.6.5对原子类型的操作要求[atomics.types.operations.req]
#define ATOMIC_VAR_INIT(value)见下文宏扩展为适合于初始化与值一致的类型的静态存储持续时间的原子变量的常量初始化的令牌序列.[注意:此操作可能需要初始化锁. - 结束注释]即使通过原子操作,对正在初始化的变量的并发访问构成了数据竞争.[例如:
atomic<int> v = ATOMIC_VAR_INIT(5);
根据前面的部分,似乎不应该在没有复制构造函数的情况下进行赋值初始化,即使它根据§12.8.31和§12.8.32被省略,但是原子被定义为:
29.5原子类型[atomics.types.generic]
atomic() …Run Code Online (Sandbox Code Playgroud)