Используя диапазон, основанный на цикле в С++ 11 с существующей переменной, я ожидал бы, что переменная будет заполнена значением последней итерации после цикла. Тем не менее, я получил разные результаты, когда тестировал его.
Пример:
#include <iostream>
#include <vector>
using namespace std;
int main() {
std::vector<int> v;
v.push_back(2);
v.push_back(43);
v.push_back(99);
int last = -50;
for (last : v)
std::cout << ":" << last << "\n";
std::cout << last;
return 0;
}
- MSVC 2013, похоже, не поддерживает диапазон, основанный на циклах без объявления типа
-
GCC-5.1 либо автоматически вводит новую переменную, либо возвращает ее к исходному значению, предоставляя
: 2
: 43
: 99
-50
Я думаю, что MSVC снова является MSVC, но как насчет GCC здесь? Почему last
не 99
в последней строке?
Учитывая определение по стандарту, я ожидал бы поведения, описанного в первом предложении.
{
auto && __range = range_expression ;
for (auto __begin = begin_expr, __end = end_expr;
__begin != __end; ++__begin) {
range_declaration = *__begin;
loop_statement
}
}
range_declaration
last
, а не int last
, это должно изменить существующую переменную.