У овом упутству ћемо научити о првенству и асоцијативности оператора у Ц ++ уз помоћ примера.
Предност оператора Ц ++
Ако постоји више оператора у једном изразу, операције се не вреднују истовремено. Уместо тога, оператери са већим приоритетом прво оцењују своје операције.
Размотримо пример:
int x = 5 - 17 * 6;
Овде је оператор множења *
већи приоритет од оператора одузимања -
. Дакле, 17 * 6
прво се оцењује.
Као резултат, горњи израз је еквивалентан
int x = 5 - (17 * 6);
Ако 5 - 17
прво желимо да проценимо , морамо их приложити у заграде :
int x = (5 - 17) * 6;
Пример 1: Предност оператора
#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; )
Оутпут
нум1 = -97 нум2 = -97 нум3 = -72
Напомена: Будући да у Ц ++-у постоји пуно оператора са више нивоа приоритета, топло се препоручује да користимо заграде како бисмо наш код учинили читљивијим.
Табела приоритета оператора Ц ++
Следећа табела (преузета са цппреференце.цом) приказује предност оператора Ц ++. Ниво првенства 1 означава операторе највишег приоритета, док ниво приоритета 17 операторе нижег приоритета.
О својству асоцијативности биће речи ускоро.
Предност | Оператор | Опис | Асоцијативност |
---|---|---|---|
1 | :: | Област резолуције | С лева надесно |
2 | а ++ а-- типе () типе () а () а () . -> | Повећање суфикса / постфикса Суфикс / постфикс декреција Функција цаст Функција цаст Функција позив Претплата Приступ члана са објекта Приступ члана са објекта птр | С лева надесно |
3 | ++ а - а + а -а ! ~ (типе) * а & сизеоф цо_аваит нев нев () делете делете () | Повећање префикса Умањење префикса Унарно плус Унарно минус Логично НЕ Битно НЕ Нити цаст у стилу Индирекција (дереференца) Адреса величине Величина очекиваног израза Динамичка алокација меморије Динамичка дислокација меморије | Десна на лево |
4 | . * -> * | Избор члана члана Селектор показивача члана | С лева надесно |
5 | а * б а / б а% б | Множење Дивизија Модул | С лева надесно |
6 | а + б а - б | додатак одузимање | С лева надесно |
7 | << >> | Помјерање у смјеру лијева Бит помака удесно | С лева надесно |
8 | <= < | Тросмерни оператор упоређивања | С лева надесно |
9 | < <= > > = | Мање од Мање од или једнако Веће од Веће од или једнако | С лева надесно |
10 | == ! = | Једнако са Не једнако са | С лева надесно |
11 | & | У битовима И. | С лева надесно |
12 | ^ | Битно КСОР | С лева надесно |
13 | |. | | У битовима ИЛИ | С лева надесно |
14 | && | Логично И | С лева надесно |
15 | || | Логично ИЛИ | С лева надесно |
16 | а? б: ц бацити цо_ииелд = + = - = * = / = % = << = >> = & = = | = | Тернарни условни оператер бацања израз приноса (Ц ++ 20) Додељивање Задатак Задатак Одузимање Задатак Множење Задатак Дељење Задатак Модул Задатак Задатак помака Лево додељивање Замах померања Десно додељивање Бит-а и додељивање Бит-а КСОР Задавање бит-а ИЛИ додељивање | Десна на лево |
17 | , | Запетац | С лева надесно |
Асоцијативност оператора Ц ++
Асоцијативност оператора је правац из ког се вреднује израз. На пример,
int a = 1; int b = 4; // a will be 4 a = b;
Погледајте a = 4;
изјаву. Асоцијативност =
оператора је здесна налево. Стога је вредност б додељена а, а не у другом смеру.
Такође, више оператора може имати исти ниво првенства (као што видимо из горње табеле). Када се у изразу користи више оператора истог нивоа првенства, они се вреднују према њиховој асоцијативности .
int a = 1; int b = 4; b += a -= 6;
И оператери +=
и -=
оператори имају исти приоритет. Будући да је асоцијативност ових оператора здесна налево, ево како се процењује последња изјава.
a -= 6
прво се оцењује. Отуда ће а бити -5- Тада
b += -5
ће бити оцењено. Дакле, б ће бити -1
Пример 2: Асоцијативност оператора
#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; )
Оутпут
а = -5 б = -1