当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《使用私有成员变量返回类型推导》经验,为你挑选了2个好方法。

正如昨天的问答中所解释的那样,g ++ 4.8和Clang 3.3都正确地抱怨下面的代码,并且在这个范围内未声明"'b_'未声明"

#include 

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中是否会随着返回类型推断而消失,这样我就可以省略decltypeprivate在类定义的末尾使用我的部分?

注意:它实际上是基于@JesseGood的答案.



1> Johannes Sch..:

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

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

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


`decltype(auto)`意味着与`auto`不同,如果你返回的是引用成员,你会得到一个引用类型.即你得到`decltype(expr)`语义(这也是问题所在).
我认为新的语法将是`auto foo()const(){return b _; }`,但我需要说`decltype(auto)`?

2> Jesse Good..:

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

auto foo() const
{ 
    return b_;    
}    

推荐阅读
重庆制造漫画社
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有