首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在使用自动函数之前必须定义它。

在使用自动函数之前必须定义它。
EN

Stack Overflow用户
提问于 2015-11-27 02:15:40
回答 1查看 1.7K关注 0票数 0

假设我们有两个成员功能:

  • 公众福()
  • 私人酒吧()

我们想在foo()中调用bar():

代码语言:javascript
复制
> cat test.cpp
class a
{
public:
    auto foo()
    {
        auto a = bar();
    }
private:
    auto bar()
    {
        return 1;
    }
};
> g++ test.cpp -std=c++14
test.cpp:6:12: error: function 'bar' with deduced return type cannot be used before it is defined
            auto a = bar();
                     ^
test.cpp:9:7: note: 'bar' declared here
    auto bar()
         ^

这是否意味着我必须在public ()之前定义私有bar()才能完成编译?

但我习惯于在私人成员之前定义公共成员,.

解析器会被改进到允许在定义之前调用auto function()吗?

EN

回答 1

Stack Overflow用户

发布于 2015-11-27 05:25:29

标准规定(第7.1.6.4节):

如果需要具有未推导占位符类型的实体的类型来确定表达式的类型,则程序的格式不正确。

此规则有助于防止循环依赖类型。

例如,如果foo的返回类型应该根据局部变量a以某种方式推断,而bar的返回类型涉及对foo()的调用,那么应该发生什么情况?也许有许多不同的类型选择是完全一致的……编译器没有选择一个类型的方法。因此,它要求在需要返回类型之前(通过在函数体中查看返回语句)来推导返回类型。

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

https://stackoverflow.com/questions/33949403

复制
相关文章

相似问题

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