#include <iostream>
#include <boost/shared_ptr.hpp>
using namespace std;
class A
{
public:
const shared_ptr<const int> getField () const
{
return field_;
}
private:
shared_ptr<int> field_;
};
void f(const A& a)
{
auto v = a.getField(); //why auto doesn't a const shared_ptr<const int> here ?
v.reset(); //OK: no compile error
}
int main()
{
A a;
f(a);
std::cin.ignore();
}
在上面的代码中,为什么编译器会将v
的类型推断为shared_ptr<int>
而不是const shared_ptr<const int>
getField返回的类型?
修改 MSVC2010
答案 0 :(得分:7)
auto
会忽略引用和顶级const
。如果你想要它们,你必须这样说:
const auto v = a.getField();
请注意,getField
会返回field_
的副本。您确定不想引用const
吗?
const shared_ptr<int>& getField () const;
auto& v = a.getField();
答案 1 :(得分:0)
在新的C ++ 11标准中,我认为此上下文中使用的auto
关键字将由编译器替换为a.getField()
返回的任何类型。这是程序员的捷径。