编译器如何区分以下内容?

时间:2012-12-12 15:02:54

标签: c++ vector containers

看一看...... http://en.cppreference.com/w/cpp/container/vector/insert 编译器如何区分第3和第4,即在是否制作所需int的no.of副本或填充所提供范围内的容器之间。

// 3rd
iterator insert( const_iterator pos, size_type count, const T& value );

// 4th
template< class InputIt >
iterator insert( const_iterator pos, InputIt first, InputIt last ); 

提前谢谢。

2 个答案:

答案 0 :(得分:2)

这是编译器(或库编写者)的问题,而不是 你的。标准说如果InputIt类型是这样的 可以调用表单3,行为应该好像 形式3被称为。通常,某种形式的模板 使用元编程,使模板起作用 采用迭代器将转发到两个不同的函数,选择 通过基于InputIt是否可以的重载决策 隐式转换为size_type或不转换(C ++ 03),或者是否 InputIt将是一个合法的迭代器(C ++ 11)。

答案 1 :(得分:0)

iteratorconst_iterator根本不是同一个类。然后编译器可以推断它必须使用的重载版本。

编辑:第四个版本中的第二个和最后一个参数必须相同,并且必须遵循InputIterator的概念。这是 size_t的情况,没有歧义。