gpt4 book ai didi

c++ - auto 和 decltype(auto) 类型推导示例

转载 作者:太空狗 更新时间:2023-10-29 20:08:30 31 4
gpt4 key购买 nike

我读了一篇关于 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 :使用自动类型推导,在这种情况下,它类似于按值传递的参数的模板类型推导。这意味着 cv 限定符和 refs 将被忽略,这将导致 Widget 最终成为类型。

对于 2:使用 decltype,然后将其传递给 auto 真正的 cw 是一个 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++ - auto 和 decltype(auto) 类型推导示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53570664/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com