使用私有成员变量返回类型推导

时间:2013-05-28 20:07:55

标签: c++ c++11 decltype c++14 return-type-deduction

正如本Q&A yesterday中所解释的那样,g ++ 4.8和Clang 3.3都正确地抱怨下面的代码,并且错误如“'b_'未在此范围内声明”

#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中也会随着返回类型扣除而消失,这样我就可以省略decltype并拥有private类定义结束时的部分?

注意actually works根据@JesseGood的回答。

2 个答案:

答案 0 :(得分:22)

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

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

这将从其正文中自动推断出返回类型。

答案 1 :(得分:5)

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

auto foo() const
{ 
    return b_;    
}