auto和delctype(auto)类型的演绎示例



我读了一篇关于用decltype推导auto类型的文章,我想知道我在下面的例子中推导类型的逻辑是否正确(所以如果我错了,请纠正我:(

#include <iostream>
using namespace std;
class Widget
{
public:
Widget() = default;
};
int main()
{
Widget w;
const Widget& cw = w;          // cw is const Widget&
auto myWidget1 = cw;           // (1) myWidget1  is Widget
decltype(auto) myWidget2 = cw; // (2) myWidget2 is const Widget&
}

到目前为止,我所理解的是:

对于1:使用自动类型推导,在这种情况下,它类似于按值传递的parms的temlpate类型推导。这意味着cv限定符和ref被忽略,这将导致Widget最终成为类型。

对于2:使用decltype,然后将其传递给auto真正的cw(constWidget&然后全部设置,类型为constWidget&。

那么,我写的/理解的是对是错呢?

谢谢

这里有一个技巧,可以让编译器打印一个类型:

template <typename>
struct TD;

然后使用:

TD<decltype(myWidget1)>();

由于TD<...>是一个不完整的类型,编译器会抱怨,并在错误消息中打印您的类型:

错误:无效使用不完整类型struct TD<Widget>

所以myWidget1的类型是Widget

myWidget2类型:

错误:无效使用不完整类型struct TD<const Widget&>

所以它的类型确实是const Widget &,正如您所怀疑的那样。

是的,你所描述的是对的。

最新更新