另一个例子

假设我们有矢量:

std::vector<int> intVector;

我们想要为这个向量声明一个迭代器。一个明显的想法是使用 auto。但是,可能需要声明一个迭代器变量(而不是将其分配给任何东西)。我们会这样做:

vector<int>::iterator iter;

然而,使用 decltype 它变得容易且不易出错(如果 intVector 的类型改变)。

decltype(intVector)::iterator iter;

或者:

decltype(intVector.begin()) iter;

在第二个例子中,begin 的返回类型用于确定实际类型,即 vector<int>::iterator

如果我们需要 const_iterator,我们只需要使用 cbegin

decltype(intVector.cbegin()) iter; // vector<int>::const_iterator