C++标准库 _Copy_unchecked

编译器: MSVC v142
所属文件: xutility
位置(行): 1761
函数名称: _Copy_unchecked
函数描述:
将迭代器的区间元素复制给另外一个迭代器.

源码:

template 
inline _OutIt _Copy_unchecked(_InIt _First, _InIt _Last, _OutIt _Dest) { 
    ...
    for (; _First != _Last; ++_Dest, (void) ++_First) {
        *_Dest = *_First;
    }
    return _Dest;
    ...
}

 

区分清楚operator++的两种场景

  • 表达式中对应的是优先级.
    下面这个代码打印出来的是4, 乍一看很奇怪, 这是因为在表达式中 前置operator++的优先级高于 operator+=,
    它先完成++a的计算, 这时a2, 然后再执行a += a的计算, 这相当于 a = 2 + 2, 所以结果是4.
    int a = 1;
    a += ++a;
    cout << a << endl;      // 4
    
    还有另外一种就是后置operator++的优先级低于operator+=.
    这里先处理(不是计算) a++, a++ 返回一个计算前的数值(右值), 等待表达式(a += 右值)计算完成后,再执行++计算.
    也就是先a += 1 等于 a = 2, 然后再a++等于 a = 3.
    int a = 1;
    a += a++;
    cout << a << endl;     // 3
    
    备注: a += a++ 这个例子是一个undefined behavior, 至于优先级需要参考这里.
  • for循环中的递增
    for (init; condition; increment/decrement) { body } 循环中的递增是完全不同的东西,它永远都是在 body 之后执行, 例如:
    for (int i = 0; i < 10; i++) {
        cout << i << " ";             // 0 1 2 3 4 5 6 7 8 9
    }
    cout << endl;
    
    for (int i = 0; i < 10; ++i) {
        cout << i << " ";             // 0 1 2 3 4 5 6 7 8 9
    }
    cout << endl;
    

你可能感兴趣的:(C++标准库 _Copy_unchecked)