[c++] decltype的行為



Answers

這是因為語言被解析的方式。

decltype(obj)::iterator it = obj.begin();

你想要它成為

(decltype(obj)::iterator) it;

但實際上,它變成了

decltype(obj) (::iterator) it;

我不得不承認,我也很驚訝地發現,情況確實如此,因為我確信我之前已經這樣做了。 然而,在這種情況下,你可以使用auto ,甚至decltype(obj.begin()) ,但除此之外,你可以

typedef decltype(obj) objtype;
objtype::iterator it;
Question

假設我有一些stl容器類obj 。 我可以這樣定義同一類型的其他對象:

decltype(obj) obj2;

但我不能這樣聲明容器的迭代器:

decltype(obj)::iterator it = obj.begin();

為什麼? 難道我做錯了什麼?




Related