为什么auto不检测参考类型的功能

时间:2016-10-21 11:18:30

标签: c++ reference c++14 auto

我用方法创建了一个类,它返回对成员的引用(不是很好的封装)。我使用auto进行重新调整的功能

class classA
{
    public:
    classA(classA & rhs)
    {
        cout<<"copy constr A"<<endl;
    };
    classA() = default;
};

class classB
{
    private:
    classA obA;
    public:
        classA& getRefA(){return obA;}
};

int main()
{
    classB obB;

    auto ob = obB.getRefA();
 }

结果是 copy constr A

我知道自动不会检测来自功能的参考。是否自动检测没有参考的类型?

2 个答案:

答案 0 :(得分:4)

auto本身并不能推断出引用类型。如果明确需要左值引用,则可以使用auto&,或者auto&&使用参考折叠规则进行类型推断。

如果您需要表达式的类型,请使用decltype。请注意,decltype(x)decltype((x))之间存在差异 - 后者保留了引用。

有关该主题的更多资源:

答案 1 :(得分:3)

简短回答是因为auto未捕获任何引用。它也不会捕获cv-qualifiers。

如果您需要此行为,则应使用decltype