Introducere in Limbajul de Programare C++. Notiuni de baza. PARTEA 3



De ce doi operatori ( = si == ) ?

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 ( == ) .


Responses

0 Respones to "Introducere in Limbajul de Programare C++. Notiuni de baza. PARTEA 3"

Trimiteți un comentariu

 
Return to top of page Copyright © 2012 | i-Learn2 Theme Converted into Blogger Template by Dominiq