正如本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的回答。
答案 0 :(得分:22)
不,但不再需要这个,因为你可以说
decltype(auto) foo() const {
return b_;
}
这将从其正文中自动推断出返回类型。
答案 1 :(得分:5)
我不这么认为,因为C ++ 14会有自动返回类型扣除。下面通过传递-std=c++1y
标志来编译g ++ 4.8。
auto foo() const
{
return b_;
}