c – auto和const对象
发布时间:2020-12-16 09:39:58 所属栏目:百科 来源:网络整理
导读:#include iostream#include boost/shared_ptr.hppusing namespace std;class A{ public: const shared_ptrconst int getField () const { return field_; } private: shared_ptrint field_;};void f(const A a){ auto v = a.getField(); //why auto doesn't
#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返回的类型? 编辑: 解决方法
auto忽略引用和顶级consts.如果你想要它们,你必须这样说:
const auto v = a.getField(); 请注意,getField返回field_的副本.你确定你不想要引用const吗? const shared_ptr<int>& getField () const; auto& v = a.getField(); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |