在c 11中引入带花括号的统一初始化之后我们发现在使用auto而不是特定类型时不幸的是存在一些不直观的不一致性://g 7.11 int x{42}; // initializes an int int y{1,2,3}; // ERROR auto a{42}; // OK: initializes an int auto b{1,2,3};//error: direct-list-initialization of ‘auto’ requires exactly one element [-fpermissive] auto c {42}; // still initializes a std::initializer_listint auto d {1,2,3}; // still OK: initializes a std::initializer_listint注意当使用auto时复制列表初始化(大括号初始化with )仍然具有初始化std::initializer_list的行为,例如变量c和d:因此我们现在在直接初始化(没有)和复制初始化(有)之间有另一个显著的区别:auto a{42}; // initializes an int now auto c {42}; // still initializes a std::initializer_listint初始化变量和对象的推荐方法应该总是使用直接列表初始化(括号()初始化没有)。