我开始捡起C++ 11,在这一点上我有一个“自动”的爱恨。C++ auto - 方便和混淆
毫无疑问,这很方便。
但它也是混乱的,这里是一个代码:
auto w = foo->get_w();
auto i = w->get_i();
bar(i);
在这段代码,get_w()
函数返回“结构S *”,这是W公司的类型。但结构S有2个重载get_i():
const I* get_i() const;
unique_ptr<I>& get_i();
由于w是不是const
,所以这是第二get_i()
被调用,从而bar(i)
应该是bar(move(i))
因为巴()签名是void bar(unique_ptr<I>)
。
但实际上,很容易迷路。
这很好,这是在编译时遇到的,但是,我想,我最初的热情正在减退。
您觉得如何?任何提示?
'bar'的原型是什么? – 2014-09-04 16:46:39
我认为这里的问题是令人困惑的const重载。这两种类型完全无关。你可能想和struct'S'的作者交谈。 – milleniumbug 2014-09-04 16:47:04
似乎很奇怪你会用完全不同的签名来重载一个函数。 – 2014-09-04 16:47:28