相关疑难解决方法(0)

为什么标准区分直接列表初始化和复制列表初始化?

我们知道这T v(x);被称为直接初始化,而T v = x;被称为复制初始化,这意味着它将构造一个临时Tx,将被复制/移入v(很可能被省略).

对于列表初始化,标准根据上下文区分两种形式.T v{x};称为直接列表初始化,T v = {x};称为复制列表初始化:

§8.5.4 [dcl.init.list] p1

[...]列表初始化可以在直接初始化或复制初始化上下文中进行; 直接初始化上下文中的列表初始化称为直接列表初始化,复制初始化上下文中的列表初始化称为复制列表初始化.[...]

但是,整个标准中只有两个引用.对于直接列表初始化,在创建像T{x}(§5.2.3/3)这样的临时表时会提到它.对于copy-list-initialization,它用于返回语句中的表达式,如return {x};(§6.6.3/2).

现在,下面的片段怎么样?

#include <initializer_list>

struct X{
  X(X const&) = delete; // no copy
  X(X&&) = delete; // no move
  X(std::initializer_list<int>){} // only list-init from 'int's
}; …
Run Code Online (Sandbox Code Playgroud)

c++ language-lawyer c++11 list-initialization

37
推荐指数
1
解决办法
2782
查看次数

标签 统计

c++ ×1

c++11 ×1

language-lawyer ×1

list-initialization ×1