隐式使用initializer_list

tem*_*boy 3 c++ initializer-list c++11

§[dcl.init.list] 8.5.4/2:

模板std::initializer_list未预定义; 如果在<initializer_list>使用之前未包含标题std::initializer_list- 即使是未命名类型的隐式用法(7.1.6.4) - 程序也是格式错误的.

这是否意味着这个程序是不正确的?

#include <vector>
int main() {
    // uses vector::vector(initializer_list<T>, const Allocator&) constructor
    std::vector<int> v = {1, 2, 3};
}
Run Code Online (Sandbox Code Playgroud)

Pra*_*ian 5

您的程序不是格式错误,因为<vector>保证包含<initializer_list>(所有标准库容器都是如此)

§23.3.1[sequences.general]

标题<vector>简介

#include <initializer_list>
...
Run Code Online (Sandbox Code Playgroud)

搜索标准#include <initializer_list>显示标题包含以下标题

  • <utility>
  • <string>
  • <array>
  • <deque>
  • <forward_list>
  • <list>
  • <vector>
  • <map>
  • <set>
  • <unordered_map>
  • <unordered_set>
  • <queue>
  • <stack>
  • <algorithm>
  • <random>
  • <valarray>
  • <regex>