1.vector的构造函数中,接受两个迭代器的版本,经过层层调用,实际上就是使用了泛型算法copy。
2.vector的迭代器实际上就是指针类型。所以函数会将它的迭代器看作是T*
类型,而不是普通的RandomAccessIterator。它会进入偏特化版本。
2.自定义的类型,即使它实际上具有trivial operaotr=,但是编译器不会自动检测这一点。编译器只能知道内置类型比如int、char、long等的trivial特性。如果我们想让自定义类型的travial特性被编译器识别,就必须自己为它做特性设定。
具体来说,就是自定义一个__type_traits
类的偏特化版本:
<>
struct __type_traits<C> {
...
typedef __true_type has_trivial_assignment_operator;
...
}
这里的C就是我们自定义的类。