以下是复制我的问题的简化代码:
工作代码:
int main(int argc, char **argv)
{
std::vector<int> x;
std::map<char, std::vector<int>::size_type> y;
y[0]=x.size();
return 0;
}
无效代码(使用decltype):
int main(int argc, char **argv)
{
std::vector<int> x;
//std::map<char, std::vector<int>::size_type> y;
std::map<char, decltype(x.begin())> y;
y[0]=x.size();
return 0;
}
代码无法编译,并出现以下错误:
错误:'operator ='不匹配(操作数类型为'std :: map&gt;&gt; :: mapped_type {aka __gnu_cxx :: __ normal_iterator&gt;}'和'std :: vector :: size_type {aka long unsigned int}') Y [0] = x.size();
decltype(x.begin())
不应该等同于std::vector<int>::size_type
吗?
答案 0 :(得分:3)
不应该
decltype(x.begin())
等同于std::vector<int>::size_type
吗?
不,std::vector::begin返回std::vector<T>::iterator
。
我想你想要的是decltype(x.size())
。