(C ++) Сохраняет ли пустой начальный оператор в цикле for предыдущую инициализацию переменной во всех компиляторах? - PullRequest
0 голосов
/ 24 октября 2019

Наш учитель на нашем вводном курсе C ++ говорил о природе циклов for и о том, как все, что находится в скобках, может быть пустым, если есть точки с запятой. Мой вопрос заключается в том, что если я возьму два цикла for, один за другим, которые имеют одну и ту же переменную, участвующую в их операторах обновления, будет ли она согласована во всех компиляторах, что после выхода из первого цикла for второй просто выберетдо значения переменной, которая появилась из первого цикла, если вы оставите начальный оператор второго цикла пустым? Наш учитель не знал, было ли это взаимодействие специфичным для компилятора;это работало в VS2017, но она выразила сомнение относительно того, будет ли это работать в более ранних версиях.

1 Ответ

2 голосов
/ 24 октября 2019

Если ваша переменная является частью первого цикла for:

for(int x = 0; 10 > x; ++x)
{
}
for(; 20 > x; ++x)
{
}

, то для стандарта 'x' даже не определено для второго цикла, и код не будет компилироваться. Обратите внимание, что некоторые старые компиляторы не следуют стандарту в этой точке и будут вести себя как в следующем примере.

Если переменная определена вне первого цикла for:

int x = 0;
for(; 10 > x; ++x)
{
}
for(; 20 > x; ++x)
{
}

thenкогда второй цикл введен, 'x' будет иметь значение, которое он имел во время окончания первого цикла. Ни в коем случае 'x' не будет повторно инициализировано вторым циклом или не получит какое-либо другое случайное значение. Он будет иметь значение, полученное в конце первого цикла, или приведет к ошибке компиляции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...