这个问题的正确答案是D,但是我很困惑的是什么时候在类dunno中的add操作发生的确切时间?数字如何被添加?关于函子的问题
考虑以下部分的C++代码:
#include <vector>
#include <iostream>
using namespace std;
template<class Iter, class Formatter>
void mystery(Iter front, Iter end, Formatter doSomething)
{
while (front != end)
{
doSomething(*front, *end):
front++; end--;
}
}
template <class T> class dunno
{
public:
void operator()(T & a, T & b)
{
a = a + b;
}
}
int main()
{
vector<int> v; ... // insert an odd number of elements into the vector
vector<int>::iterator it1 - v.begin();
vector<int>::iterator it2 - v.end();
it2--;
dunno<int> d;
mystery<vector<int>::iterator, dunno<int> >(itl, it2, d);
for (int i = 0; i < v.size(); i++) cout << v[i] << endl;
return 0;
}
如果你认为所有的迭代器是双向的,并且不恒定,下列哪项是正确的? (a)由于神秘参数列表中的类型不匹配,此代码不能编译。 (b)由于模板实例化中的语法错误,此代码不能编译为神秘。 (c)如果矢量由整数1,2,3,4,5,6,7按顺序组成,第一个项目在左边,则输出为1,2,3,4,5,6,7,7,8,9, (dod不改变矢量)
(d)如果矢量由整数1,2,3,4,5,6,7以该顺序组成,则与在左边的第一项,则输出是8,8,8,5,6,7。
(e)这些选项都不描述此代码的行为。