微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c – decltype作为类成员函数中的返回类型

我在下面的代码编译错误.
struct B{
    double operator()(){
        return 1.0;
    }
};

struct A {
    auto func() -> decltype(b())
    {
        return b();
    }

    B b;
};

但是,如果我重组A,它会编译.

gcc 4.8表示在这个范围内没有声明’b’.

struct A {
    B b;
    auto func() -> decltype(b())
    {
        return b();
    }
};

那么,第一个怎么了?

解决方法

对类的定义进行了两次处理:首先收集成员声明,​​包括函数签名,然后对定义的主体进行解析.

因此,函数体可以访问所有成员声明,​​包括后续的声明,但是函数原型只能看到前面的声明.

原文地址:https://www.jb51.cc/c/111529.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐