18

正如昨天的问答中所解释的那样,g++ 4.8 和 Clang 3.3 都正确地抱怨下面的代码,并出现类似“'b_' is not declared in this scope”这样的错误

#include <iostream>

class Test
{
public:
    Test(): b_(0) {}

    auto foo() const -> decltype(b_) // just leave out the -> decltype(b_) works with c++1y
    { 
        return b_;    
    }    
private:
    int b_;
};

int main() 
{
    Test t;
    std::cout << t.foo();
}

private部分移动到类定义的顶部会消除错误并打印 0。

我的问题是,这个错误是否也会在 C++14 中通过 return type deduction 消失,以便我可以在类定义的末尾省略decltypeand部分?private

注意:它实际上是基于@JesseGood 的回答。

4

2 回答 2

22

不,但不再需要这个,因为你可以说

decltype(auto) foo() const { 
    return b_;    
}

这将自动从其主体中推断出返回类型。

于 2013-05-28T20:16:34.453 回答
5

我不这么认为,因为 C++14 会有自动返回类型推导。以下通过传递-std=c++1y标志使用 g++ 4.8 编译。

auto foo() const
{ 
    return b_;    
}    
于 2013-05-28T20:17:29.840 回答