2015-05-05 2 views
-2

Я изучаю C++-праймер, используя сообщество VS 2013. И когда я тестирую следующие две программы. Я очень смущен, потому что думаю, что выход должен быть одним и тем же. Почему результаты разные? Первый из них выглядит следующим образом.Об операторе запятой в C++

#include "stdafx.h" 
#include<iostream> 
#include<vector> 

using std::vector; 
using std::cout; 
using std::cin; 
using std::endl; 
int main() 
{ 
    vector<int> ivec(10,0); 
    vector<int>::size_type cnt =ivec.size(); 
    for (vector<int>::size_type ix = 0; ix != ivec.size(); ++ix) 
    { 
     --cnt; 
     ivec[ix] = cnt; 
     cout << ivec[ix] <<" "<<cnt<< endl; 
    } 

    return 0; 
} 

И вторая программа заключается в следующем.

#include "stdafx.h" 
#include<iostream> 
#include<vector> 

using std::vector; 
using std::cout; 
using std::cin; 
using std::endl; 
int main() 
{ 
    vector<int> ivec(10,0); 
    vector<int>::size_type cnt =ivec.size(); 
    for (vector<int>::size_type ix = 0; ix != ivec.size(); ++ix, --cnt) 
    { 
     ivec[ix] = cnt; 
     cout << ivec[ix] <<" "<<cnt<< endl; 
    } 

    return 0; 
} 
+4

Для 'for (a; b; c;) {d; } ', * когда * выполняются' '' '' '' '' '' '' '' '' '' '' '' '' '' '? – Biffen

+3

Третье выражение в цикле 'for' не выполняется до тех пор, пока не будет выполнено тело цикла' for', в отличие от вашего первого примера, поэтому '--cnt' не выполняется до тех пор, пока тело не будет выполнено. – EdChum

ответ

7

for петля как

for (a; b; c) 
{ 
    d; 
} 

эквивалентно следующему

a; 
while (b) 
{ 
    d; 
    c; 
} 

Так что же происходит в c части делается после тело цикла делается.

В вашем втором случае выражение --cnt происходит после вы используете его, в то время как в первом случае --cnt происходит перед тем.

+0

Большое спасибо! !!! – LiuHao

Смежные вопросы