auto和const对象

时间:2012-01-21 14:35:10

标签: c++ const auto

#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

2 个答案:

答案 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()返回的任何类型。这是程序员的捷径。

请参阅http://en.wikipedia.org/wiki/C%2B%2B11#Type_inference