Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
  • Loading branch information
Patricky-Tau authored Apr 26, 2023
1 parent 10d420b commit 51bf3a1
Showing 1 changed file with 2 additions and 2 deletions.
4 changes: 2 additions & 2 deletions src/1.DeducingTypes/item2.md
Original file line number Diff line number Diff line change
Expand Up @@ -115,13 +115,13 @@ auto x2(27);
auto x3 = { 27 };
auto x4{ 27 };
````
这些声明都能通过编译,但是他们不像替换之前那样有相同的意义。前面两个语句确实声明了一个类型为`int`值为27的变量,但是后面两个声明了一个存储一个元素27的 `std::initializer_list<int>`类型的变量。
这些声明都能通过编译,但是他们不像替换之前那样有相同的意义。除了第三个声明了一个存储一个元素27的 `std::initializer_list<int>`类型的变量,其他都声明了一个类型为`int`值为27的变量
````cpp
auto x1 = 27; //类型是int,值是27
auto x2(27); //同上
auto x3 = { 27 }; //类型是std::initializer_list<int>,
//值是{ 27 }
auto x4{ 27 }; //同上
auto x4{ 27 }; //同上(译者注:书出版后,这一点发生了变化,与 x1, x2 是一个语义了)
````
这就造成了`auto`类型推导不同于模板类型推导的特殊情况。当用`auto`声明的变量使用花括号进行初始化,`auto`类型推导推出的类型则为`std::initializer_list`。如果这样的一个类型不能被成功推导(比如花括号里面包含的是不同类型的变量),编译器会拒绝这样的代码:
````cpp
Expand Down

0 comments on commit 51bf3a1

Please sign in to comment.