English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
在本教程中,我們將借助示例來了解C ++中運算子的優先級和關聯性。
如果單個表達式中有多個運算子,則不會同時評估這些運算。 相反,具有較高優先級的運算子將首先對其操作進行評估。
讓我們看一個實例:
int x = 5 - 17 * 6;
在此,乘法運算子 * 的優先級高於減法運算子 - 。因此,17 * 6首先進行評估。
結果,以上表達式等效於
int x = 5 - (17 * 6);
如果我們想先進行評估5 - 17,則必須將它們放在括號內:
int x = (5 - 17) * 6;
#include <iostream> using namespace std; int main() { //首先評估17 * 6 int num1 = 5 - 17 * 6; //與num1等效的表達式 int num2 = 5 - (17 * 6); //強制編譯器首先評估5-17 int num3 = (5 - 17) * 6; cout << "num1 = " << num1 << endl; cout << "num2 = " << num2 << endl; cout << "num3 = " << num3 << endl; return 0; }
结果输出
num1 = -97 num2 = -97 num3 = -72
注意:由於C ++中有許多運算子具有多個優先級,因此強烈建議我們使用括號使代碼更具可讀性。
下表顯示了C ++運算子的優先級。優先級1表示優先級最高的運算子,而優先級17表示優先級最低的運算子。
優先級 | 運算子 | 描述 | 結合律 |
---|---|---|---|
1 | :: | 範圍 | Da sinistra a destra |
2 | a++ a-- type( ) type{ } a( ) a[ ] . -> | Incremento posteriore Decremento/scremento posteriore Conversione di stile funzione Conversione di stile funzione Chiamata di funzioneIndice Accedi ai membri dell'oggetto Accedi ai membri dell'oggetto da ptr | Da sinistra a destra |
3 | ++a --a +a -a ! ~ (type) *a &a sizeof co_await new new[ ] delete delete[] | Incremento prefisso Decremento prefisso Positivo Negativo Negazione logica Negazione bit a bit Conversione C-style Indiretto (de-referenziamento) Indirizzo Dimensione Espressione await Assegnamento della memoria dinamica Rilascio della memoria dinamica | Da destra a sinistra |
4 | .* ->* | Selettore di oggetto membro Selettore di puntatore membro | Da sinistra a destra |
5 | a * b a / b a % b | Moltiplicazione Divisione Modulo | Da sinistra a destra |
6 | a + b a - b | Addizione Sottrazione | Da sinistra a destra |
7 | << >> | Shift a sinistra bit a bit Shift a destra bit a bit | Da sinistra a destra |
8 | <=> | Operatori di confronto ternario | Da sinistra a destra |
9 | < <= > >= | Less Less than or equal Greater Greater than or equal | Da sinistra a destra |
10 | == != | Uguale Non uguale | Da sinistra a destra |
11 | & | AND bit a bit | Da sinistra a destra |
12 | ^ | XOR bit a bit | Da sinistra a destra |
13 | | | OR bit a bit | Da sinistra a destra |
14 | && | AND logico | Da sinistra a destra |
15 | || | OR logico | Da sinistra a destra |
16 | a ? b : c throw co_yield = += -= *= /= %= <<= >>= &= ^= |= | Operatore condizionale ternario Operatore throw Espressione yield (C++ 20) Assegnamento Assegnamento addizione Assegnamento sottrazione Assegnamento moltiplicazione Distribuzione di divisione Assegnamento modulo Assegnamento di shift a sinistra bit a bit Assegnamento di shift a destra bit a bit Assegnamento di AND bit a bit Assegnamento di XOR bit a bit Assegnamento di OR bit a bit | Da destra a sinistra |
17 | , | Operatore virgola | Da sinistra a destra |
AssociazioneL'attributo di natura sarà discusso in seguito.
L'associazione degli operatori è il calcolo dell'espressioneDirezioneAd esempio,
int a = 1; int b = 4; // a = 4 a = b;
Vedere l'istruzione a=4; = L'associazione dell'operatore = è da destra a sinistra. Pertanto, il valore di b viene assegnato a a.
Allo stesso modo, più di un operatore può avere la stessa priorità (come indicato nella tabella sopra). Quando si utilizzano più operatori con la stessa priorità nell'espressione, verranno valutati in base alla loroAssociazioneValutarli.
int a = 1; int b = 4; b += a -= 6;
Gli operatori += e -= hanno la stessa priorità. Poiché l'associazione di questi operatori è da destra a sinistra, questo è il modo in cui viene valutata l'ultima istruzione.
a -= 6 Valutazione iniziale. Pertanto, a sarà-5
然后,b += -5将被评估。因此,b将为-1
#include <iostream> using namespace std; int main() { int a = 1; int b = 4; // a -= 6 首先进行评估 b += a -= 6; cout << "a = " << a << endl; ; cout << "b = " << b; }
结果输出
a = -5 b = -1