編譯器: MSVC v142
所屬文件: xutility
位置(行): 1761
函數(shù)名稱:_Copy_unchecked
函數(shù)描述:
將迭代器的區(qū)間元素復制給另外一個迭代器.
源碼:
template <class _InIt, class _OutIt>
inline _OutIt _Copy_unchecked(_InIt _First, _InIt _Last, _OutIt _Dest) {
...
for (; _First != _Last; ++_Dest, (void) ++_First) {
*_Dest = *_First;
}
return _Dest;
...
}
?
區(qū)分清楚operator++
的兩種場景
- 表達式中對應的是優(yōu)先級.
下面這個代碼打印出來的是4, 乍一看很奇怪, 這是因為在表達式中前置operator++
的優(yōu)先級高于operator+=
,
它先完成++a
的計算, 這時a
是2
, 然后再執(zhí)行a += a
的計算, 這相當于a = 2 + 2
, 所以結(jié)果是4
.
還有另外一種就是int a = 1; a += ++a; cout << a << endl; // 4
后置operator++
的優(yōu)先級低于operator+=
.
這里先處理(不是計算)a++
,a++
返回一個計算前的數(shù)值(右值
), 等待表達式(a += 右值
)計算完成后,再執(zhí)行++
計算.
也就是先a += 1
等于a = 2
橙困, 然后再a++
等于a = 3
.
備注:int a = 1; a += a++; cout << a << endl; // 3
a += a++
這個例子是一個undefined behavior, 至于優(yōu)先級需要參考這里. - for循環(huán)中的
遞增
for (init; condition; increment/decrement) { body }
循環(huán)中的遞增是完全不同的東西即彪,它永遠都是在body
之后執(zhí)行, 例如: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;