In C si C++, programul urmator este permis fara probleme. Cu toate acestea, aproape intotdeauna determina o comportare incorecta :
if ( x = y ) // GRESIT ! Atribuire ! cout << " x si y sunt egale " ;
Ce face acest exemplu ? Atribuie lui x valoarea lui y si foloseste valoarea respectiva ca o conditie de test. Daca aceasta valoare este diferita de zero, este considerata "adevarata". In consecinta, daca y ia orice valoare alta decat zero, conditia de mai sus este intotdeauna considerata adevarata si instructiunea se executa intotdeauna !
Iata versiunea corecta, care va executa ce doriti :
if ( x == y ) // CORECT : Testarea egalitatii. cout << " x si y sunt egale " ;
Aici, x == y este o operatie care verifica egalitatea si returneaza "true" ( adevarat ) sau "false" ( fals ) , dupa caz. Important de retinut este faptul ca nu trebuie sa facem confuzie intre verificarea egalitatii si atribuire ( x = y ) , care copiaza datele in variabila x si returneaza "true" pentru orice valoare diferita de zero.
In particular, aproape fiecare expresie din C++ returneaza o valoare, fapt valabil si pentru atribuire ( = ) , care este considerata "expresie cu efect de margine". Asadar, puteti initializa trei variabile simultan procedand astfel :
x = y = z = 0 ; // Atribuie tuturor variabilelor valoarea 0.
Ceea ce este echivalent cu :
x = ( y = ( z = 0 ) ) ; // Atribuie tuturor variabilelor valoarea 0.
Fiecare instructiune, incepand cu cea din dreapta ( z = o ), returneaza valoarea care a fost atribuita ( 0 ), care apoi este folosita in urmatoarea atribuire ( y = 0 ) . Cu alte cuvinte, 0 este transmis de trei ori, de fiecare data unei alte variabile.
In consecinta, C++ trateaza "x = y " ca pe o expresie obisnuita, care returneaza o valoarea, ca orice alta expresie.
Si asta inca n-ar fi nimic, daca n-ar exista o alta regula mostenita de C++ : orice valoare poate fi utilizata drept conditie. Ca atare, compialtorul nu va va opri sa scrieti ceva de genul :
if ( x = y ) // . . .
In consecinta, fiti foarte atenti cand folositi un singur semn egal ( = ) , respectiv doua asemenea semne ( == ) . Labels: programare-c++
Responses
0 Respones to "Introducere in Limbajul de Programare C++. Notiuni de baza. PARTEA 3"
Trimiteți un comentariu