我用方法创建了一个类,它返回对成员的引用(不是很好的封装)。我使用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
我知道自动不会检测来自功能的参考。是否自动检测没有参考的类型?
答案 0 :(得分:4)
auto
本身并不能推断出引用类型。如果明确需要左值引用,则可以使用auto&
,或者auto&&
使用参考折叠规则进行类型推断。
如果您需要表达式的类型,请使用decltype
。请注意,decltype(x)
和decltype((x))
之间存在差异 - 后者保留了引用。
有关该主题的更多资源:
答案 1 :(得分:3)
简短回答是因为auto
未捕获任何引用。它也不会捕获cv-qualifiers。
如果您需要此行为,则应使用decltype
。