From 0ced53853bbab227a6eebb88df2a41abb3adf49c Mon Sep 17 00:00:00 2001 From: y1yang0 Date: Sun, 29 Jan 2023 03:39:02 +0000 Subject: [PATCH] deploy: 305485e38eaefe70584ce7a8a898afbb5416dc22 --- 1.DeducingTypes/item1.html | 2 +- 1.DeducingTypes/item3.html | 2 +- 2.Auto/item5.html | 2 +- 3.MovingToModernCpp/item11.html | 2 +- 3.MovingToModernCpp/item8.html | 2 +- print.html | 10 +++++----- searchindex.js | 2 +- searchindex.json | 2 +- 8 files changed, 12 insertions(+), 12 deletions(-) diff --git a/1.DeducingTypes/item1.html b/1.DeducingTypes/item1.html index 21957b3..941cb2d 100644 --- a/1.DeducingTypes/item1.html +++ b/1.DeducingTypes/item1.html @@ -167,7 +167,7 @@ f(x); //用一个int类型的变量调用f

我们可能很自然的期望T和传递进函数的实参是相同的类型,也就是,Texpr的类型。在上面的例子中,事实就是那样:xintT被推导为int。但有时情况并非总是如此,T的类型推导不仅取决于expr的类型,也取决于ParamType的类型。这里有三种情况:

我们下面将分成三个情景来讨论这三种情况,每个情景的都基于我们之前给出的模板:

diff --git a/1.DeducingTypes/item3.html b/1.DeducingTypes/item3.html index e410421..1d702bd 100644 --- a/1.DeducingTypes/item3.html +++ b/1.DeducingTypes/item3.html @@ -277,7 +277,7 @@ decltype(auto) f2()

注意不仅f2的返回类型不同于f1,而且它还引用了一个局部变量!这样的代码将会把你送上未定义行为的特快列车,一辆你绝对不想上第二次的车。

当使用decltype(auto)的时候一定要加倍的小心,在表达式中看起来无足轻重的细节将会影响到decltype(auto)的推导结果。为了确认类型推导是否产出了你想要的结果,请参见Item4描述的那些技术。

-

同时你也不应该忽略decltype这块大蛋糕。没错,decltype(单独使用或者与auto一起用)可能会偶尔产生一些令人惊讶的结果,但那毕竟是少数情况。通常,decltype都会产生你想要的结果,尤其是当你对一个名字使用decltype时,因为在这种情况下,decltype只是做一件本分之事:它产出名字的声明类型。

+

同时你也不应该忽略decltype这块大蛋糕。没错,decltype(单独使用或者与auto一起用)可能会偶尔产生一些令人惊讶的结果,但那毕竟是少数情况。通常,decltype都会产生你想要的结果,尤其是当你对一个变量使用decltype时,因为在这种情况下,decltype只是做一件本分之事:它产出变量的声明类型。

请记住: