3
#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();
}

上記のコードで、コンパイラがgetFieldによって返されるv型としてshared_ptr<int>ではなく、の型を推定するのはなぜですか?const shared_ptr<const int>

編集: MSVC2010

4

2 に答える 2

8

auto参照とト​​ップレベルを無視しますconst。それらを元に戻したい場合は、次のように言う必要があります。

const auto v = a.getField();

getFieldのコピーを返すことに注意してくださいfield_。参照したくないですconstか?

const shared_ptr<int>& getField () const;

auto& v = a.getField();
于 2012-01-21T15:02:12.700 に答える
0

auto新しいC++11標準では、このコンテキストで使用されるキーワードは、返されるタイプが何であれ、コンパイラーによって置き換えられると思いa.getField()ます。これはプログラマーにとっての近道です。

http://en.wikipedia.org/wiki/C%2B%2B11#Type_inferenceを参照してください

于 2012-01-21T15:07:49.893 に答える