首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >auto和delctype(auto)类型演绎示例

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

Stack Overflow用户
提问于 2018-12-01 12:16:42
回答 1查看 167关注 0票数 3

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

代码语言:javascript
运行
复制
#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-限定符和推荐被忽略,这将导致Widget作为类型在最后。

for 2:使用解密类型,然后传递给auto,真正的cw是const &然后所有都被设置,类型是const &。

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

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-12-01 12:27:43

下面是一个技巧,您可以让编译器打印一个类型:

代码语言:javascript
运行
复制
template <typename>
struct TD;

然后使用:

代码语言:javascript
运行
复制
TD<decltype(myWidget1)>();

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

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

所以myWidget1的类型是Widget

myWidget2类型

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

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

所以是的,你所说的是对的。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53570664

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档