c – auto和delctype(auto)类型推导示例

我读了一篇关于使用decltype进行自动类型演绎的文章,我想知道我的逻辑是否正确如何在下面的例子中推断出类型(所以如果我弄错了请纠正我:)

#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&
}

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

for 1:使用自动类型推导,在这种情况下,它类似于通过值传递的parms的temlpate类型推导.这意味着忽略了cv-qualifiers和refs,这将导致Widget最终成为类型.

for 2:使用decltype,然后传递给auto,这真的是一个const Widget&然后所有都设置,类型是const Widget&.

我写的/理解是对还是错?

谢谢

解决方法:

这是一个技巧,所以你可以让编译器打印一个类型:

template <typename>
struct TD;

然后使用:

TD<decltype(myWidget1)>();

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

error: invalid use of incomplete type struct TD<Widget>

所以myWidget1的类型是Widget.

myWidget2的类型:

error: invalid use of incomplete type struct TD<const Widget&>

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

所以,是的,你所描述的是正确的.

上一篇:【C++】《C++ 17 入门经典》读书笔记 22 ---- decltype 和拖尾返回类型


下一篇:c – 模板,decltype和非classtypes