必须在使用之前定义自动功能

时间:2015-11-27 02:15:40

标签: c++ c++14 auto

假设我们有两个成员函数:

  • public foo()
  • 私人酒吧()

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

> 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 foo()之前定义 private bar()来完成编译?

但我过去常常在私人成员之前定义公众成员 ......

是否会改进解析器以允许在定义之前调用auto function()

1 个答案:

答案 0 :(得分:3)

标准说(第7.1.6.4节):

  

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

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

例如,如果根据局部变量foo以某种方式推断出a的返回类型会发生什么,并且bar的返回类型涉及调用foo()?也许有许多不同类型的选择会完全一致......编译器无法选择一种。因此,它需要在需要之前推导出返回类型(通过查看函数体内的return语句)。