Предност и асоцијативност оператора Ц ++

У овом упутству ћемо научити о првенству и асоцијативности оператора у Ц ++ уз помоћ примера.

Предност оператора Ц ++

Ако постоји више оператора у једном изразу, операције се не вреднују истовремено. Уместо тога, оператери са већим приоритетом прво оцењују своје операције.

Размотримо пример:

 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

Занимљиви Чланци...