I den här självstudien lär vi oss om förekomsten och associativiteten hos operatörer i C ++ med hjälp av exempel.
C ++ operatörers företräde
Om det finns flera operatorer i ett enda uttryck utvärderas inte operationerna samtidigt. Snarare får operatörer med högre prioritet först utvärdera sin verksamhet.
Låt oss överväga ett exempel:
int x = 5 - 17 * 6;
Här har multiplikationsoperatorn *
högre prioritet än subtraktionsoperatören -
. Därför 17 * 6
utvärderas först.
Som ett resultat är ovanstående uttryck ekvivalent med
int x = 5 - (17 * 6);
Om vi först vill utvärdera 5 - 17
måste vi stänga dem inom parentes :
int x = (5 - 17) * 6;
Exempel 1: Operatörens företräde
#include using namespace std; int main() ( // evaluates 17 * 6 first int num1 = 5 - 17 * 6; // equivalent expression to num1 int num2 = 5 - (17 * 6); // forcing compiler to evaluate 5 - 17 first int num3 = (5 - 17) * 6; cout << "num1 = " << num1 << endl; cout << "num2 = " << num2 << endl; cout << "num3 = " << num3 << endl; return 0; )
Produktion
num1 = -97 num2 = -97 num3 = -72
Obs! Eftersom det finns många operatörer i C ++ med flera nivåer av företräde rekommenderas det starkt att vi använder parenteser för att göra vår kod mer läsbar.
C ++ - operatörens prioritetstabell
Följande tabell (hämtad från cppreference.com) visar C ++ -operatörernas företräde. Prioritetsnivå 1 betyder operatörer med högsta prioritet, medan Prioritetsnivå 17 betyder operatörer med lägsta prioritet.
Egendom associativitet kommer att diskuteras inom kort.
Företräde | Operatör | Beskrivning | Associativitet |
---|---|---|---|
1 | :: | Omfattningsupplösning | Vänster till höger |
2 | a ++ a-- typ () typ () a () a () . -> | Suffix / postfix ökning Suffix / postfix minskning Funktion cast Funktion cast Funktion samtal Prenumeration Medlemstillgång från ett objekt Medlemstillgång från objekt ptr | Vänster till höger |
3 | ++ a --a + a -a ! ~ (typ) * a & en storlek på co_await nytt nytt () radera ta bort () | Förhöjning av prefix Prefix minskning Unary plus Unary minus Logiskt INTE Bitvis INTE C- stilbesättning Indirektion (Dereference) Adress-av Storlek på inväntat-uttryck Dynamisk minnesallokering Dynamiskt minne | Höger till vänster |
4 | . * -> * | Välj objekt för medlemsobjekt | Vänster till höger |
5 | a * b a / b a% b | Multiplikation division Modulus | Vänster till höger |
6 | a + b a - b | Addition Subtraktion | Vänster till höger |
7 | << >> | Bitvis vänster skift Bitvis höger skift | Vänster till höger |
8 | <= < | Trevägs jämförelseoperatör | Vänster till höger |
9 | < <= > > = | Mindre än mindre än eller lika med större än större än eller lika med | Vänster till höger |
10 | == ! = | Lika med Ej lika med | Vänster till höger |
11 | & | Bitvis OCH | Vänster till höger |
12 | ^ | Bitvis XOR | Vänster till höger |
13 | | | Bitvis ELLER | Vänster till höger |
14 | && | Logisk OCH | Vänster till höger |
15 | || | Logiskt ELLER | Vänster till höger |
16 | a? b: c kasta co_yield = + = - = * = / = % = << = >> = & = = | = | Ternära Villkors kasta operatör utbyte uttryck (C ++ 20) Assignment Addition Assignment Subtraktion Assignment Multiplikation Assignment Division Assignment Modulus Assignment Bitvis Shift Vänster Assignment Bitvis Shift Höger Assignment Bitvis OCH Assignment Bitvis XOR Assignment Bitvis ELLER Assignment | Höger till vänster |
17 | , | Kommaoperatör | Vänster till höger |
C ++ Operators Associativity
Operatörsassociativitet är den riktning från vilken ett uttryck utvärderas. Till exempel,
int a = 1; int b = 4; // a will be 4 a = b;
Ta en titt på a = 4;
uttalandet. =
Operatörens associativitet är från höger till vänster. Följaktligen tilldelas värdet på b och inte i andra riktningen.
Flera operatörer kan också ha samma prioritetsnivå (som vi kan se från ovanstående tabell). När flera operatörer med samma prioritetsnivå används i ett uttryck utvärderas de utifrån deras associativitet .
int a = 1; int b = 4; b += a -= 6;
Både operatörer +=
och -=
operatörer har samma företräde. Eftersom dessa operatörers associativitet är från höger till vänster, så utvärderas det senaste uttalandet.
a -= 6
utvärderas först. Därför blir a -5- Därefter
b += -5
kommer att utvärderas. Därför kommer b att vara -1
Exempel 2: Operators Associativity
#include using namespace std; int main() ( int a = 1; int b = 4; // a -= 6 is evaluated first b += a -= 6; cout << "a = " << a << endl; ; cout << "b = " << b; )
Produktion
a = -5 b = -1