我開始撿起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