C ++ Operatör Önceliği ve İlişkilendirilebilirliği

Bu eğiticide, örnekler yardımıyla C ++ 'daki operatörlerin önceliği ve ilişkilendirilebilirliği hakkında bilgi edineceğiz.

C ++ Operatörlerinin Önceliği

Tek bir ifadede birden fazla operatör varsa, işlemler aynı anda değerlendirilmez. Bunun yerine, daha yüksek önceliğe sahip operatörlerin operasyonları ilk olarak değerlendirilir.

Bir örnek düşünelim:

 int x = 5 - 17 * 6; 

Burada çarpma operatörü *, çıkarma operatöründen daha yüksek düzeyde önceliğe sahiptir -. Bu nedenle 17 * 6önce değerlendirilir.

Sonuç olarak, yukarıdaki ifade eşdeğerdir

 int x = 5 - (17 * 6);

5 - 17Önce değerlendirmek istiyorsak , onları parantez içine almalıyız :

 int x = (5 - 17) * 6;

Örnek 1: Operatörlerin Önceliği

 #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; )

Çıktı

 num1 = -97 num2 = -97 num3 = -72

Not: C ++ 'da birden çok öncelik düzeyine sahip çok sayıda operatör olduğundan, kodumuzu daha okunaklı hale getirmek için parantez kullanmamız şiddetle tavsiye edilir .

C ++ Operatörleri Öncelik Tablosu

Aşağıdaki tablo (cppreference.com'dan alınmıştır) C ++ operatörlerinin önceliğini göstermektedir. Öncelik Düzeyi 1, en yüksek önceliğe sahip işleçleri belirtirken, Öncelik Düzeyi 17, en düşük önceliğe sahip işleçleri belirtir.

Mülkiyet ilişkilendirilebilirlik kısaca ele alınacaktır.

Öncelik Şebeke Açıklama İlişkisellik
1 :: Kapsam Çözümü Soldan sağa
2 a ++
a--
type ()
type ()
a ()
a ()
.
->
Sonek / sonek artışı
Sonek / sonek azaltma
İşlev cast
İşlev atama
İşlev çağrısı Bir nesneden
Abonelik
Üye erişimi
Nesne ptr'den üye erişimi
Soldan sağa
3 ++ a
--a
+ a
-a
!
~
(type)
* a
& a
sizeof
co_await
new new ()
delete delete ()
Önek Arttırma
Önek eksiltme
Tekli artı
Tekli eksi
Mantıksal değil
Bit değil
C stili döküm
doğru olmayan (KQUEUE)
Adres-bölgesinin
boyutu-of
bekliyoruz ifade
Dinamik bellek ayırma
Dinamik Hafıza serbest bırakma
Sağdan sola
4 . *
-> *
Üye nesne seçici
Üye işaretçi seçici
Soldan sağa
5 a * b
a / b
a% b
Çarpma
Bölme
Modülü
Soldan sağa
6 a + b
a - b
Toplama
Çıkarma
Soldan sağa
7 <<
>>
Bit düzeyinde sola kaydırma
Bit düzeyinde sağa kaydırma
Soldan sağa
8 <= < Üç yollu karşılaştırma operatörü Soldan sağa
9 <
<=
>
> =
Less than
Less than or equal to
Greater than
Greater than or equal to
Left to Right
10 ==
!=
Equal to
Not equal to
Left to Right
11 & Bitwise AND Left to Right
12 ^ Bitwise XOR Left to Right
13 | Bitwise OR Left to Right
14 && Logical AND Left to Right
15 || Logical OR Left to Right
16 a ? b : c
throw
co_yield
=
+=
-=
*=
/=
%=
<<=
>>=
&=
^=
|=
Ternary Conditional
throw operator
yield expression (C++ 20)
Assignment
Addition Assignment
Subtraction Assignment
Multiplication Assignment
Division Assignment
Modulus Assignment
Bitwise Shift Left Assignment
Bitwise Shift Right Assignment
Bitwise AND Assignment
Bitwise XOR Assignment
Bitwise OR Assignment
Right to Left
17 , Comma operator Left to Right

C++ Operators Associativity

Operator associativity is the direction from which an expression is evaluated. For example,

 int a = 1; int b = 4; // a will be 4 a = b;

Take a look at a = 4; statement. The associativity of the = operator is from right to left. Hence, the value of b is assigned to a, and not in the other direction.

Ayrıca, birden çok operatör aynı öncelik düzeyine sahip olabilir (yukarıdaki tablodan da görebileceğimiz gibi). Bir ifadede aynı öncelik düzeyine sahip birden çok operatör kullanıldığında, bunlar ilişkilendirilebilirliklerine göre değerlendirilir .

 int a = 1; int b = 4; b += a -= 6;

Operatörler Hem +=ve -=operatörler aynı önceliğe sahiptir. Bu operatörlerin çağrışımları sağdan sola doğru olduğu için, işte son cümle nasıl değerlendirilir.

  • a -= 6önce değerlendirilir. Dolayısıyla, a -5 olacaktır
  • Daha sonra b += -5değerlendirilecektir. Bu nedenle, b -1 olacaktır

Örnek 2: Operatör İlişkilendirmesi

 #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; )

Çıktı

 a = -5 b = -1

Ilginç makaleler...