C++ 基礎(chǔ)教程

C++ 流程控制

C++ 函數(shù)

C++ 數(shù)組 & 字符串

C++ 數(shù)據(jù)結(jié)構(gòu)

C++ 類 & 對象

C++ 指針

C++ 繼承

C++ STL 教程

C++ 參考手冊

C++ 運(yùn)算符優(yōu)先級和關(guān)聯(lián)性

在本教程中,我們將借助示例來了解C ++中運(yùn)算符的優(yōu)先級和關(guān)聯(lián)性。

C ++運(yùn)算符優(yōu)先級

如果單個(gè)表達(dá)式中有多個(gè)運(yùn)算符,則不會同時(shí)評估這些運(yùn)算。 相反,具有較高優(yōu)先級的運(yùn)算符將首先對其操作進(jìn)行評估。

讓我們看一個(gè)實(shí)例:

int x = 5 - 17 * 6;

在此,乘法運(yùn)算符 * 的優(yōu)先級高于減法運(yùn)算符 - 。因此,17 * 6首先進(jìn)行評估。

結(jié)果,以上表達(dá)式等效于

int x = 5 - (17 * 6);

如果我們想先進(jìn)行評估5 - 17,則必須將它們放在括號內(nèi)

int x = (5 - 17) * 6;

示例1:運(yùn)算符優(yōu)先級

#include <iostream>
using namespace std;

int main() {

  // 首先評估17 * 6
  int num1 = 5 - 17 * 6;

  //與num1等效的表達(dá)式
  int num2 = 5 - (17 * 6);

  //強(qiáng)制編譯器首先評估5-17
  int num3 = (5 - 17) * 6;

  cout << "num1 = " << num1 << endl;
  cout << "num2 = " << num2 << endl;
  cout << "num3 = " << num3 << endl;

  return 0;
}

輸出結(jié)果

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

注意:由于C ++中有很多運(yùn)算符具有多個(gè)優(yōu)先級,因此強(qiáng)烈建議我們使用括號使代碼更具可讀性。

C ++運(yùn)算符優(yōu)先級表

下表顯示了C ++運(yùn)算符的優(yōu)先級。優(yōu)先級1表示優(yōu)先級最高的運(yùn)算符,而優(yōu)先級17表示優(yōu)先級最低的運(yùn)算符。

優(yōu)先級
運(yùn)算符
描述結(jié)合律
1::作用域從左至右
2a++
a--
type( )
type{ }
a( )
a[ ]
.
->
后綴/后綴增量
后綴/后綴減量

函數(shù)風(fēng)格轉(zhuǎn)型

函數(shù)風(fēng)格轉(zhuǎn)型

函數(shù)調(diào)用
下標(biāo)
從對象訪問成員
從對象ptr訪問成員
從左至右
3++a
--a
+a
-a
!
~
(type)
*a
&a
sizeof
co_await
new new[ ]
delete delete[]
前綴增量
前綴減量

負(fù)
邏輯非
按位非
C風(fēng)格轉(zhuǎn)型
間接(解引用)
取地址
取大小
await表達(dá)式
動態(tài)內(nèi)存分配
動態(tài)內(nèi)存釋放
從右至左
4.*
->*

成員對象選擇器

成員指針選擇器

從左至右
5a * b
a / b
a % b

取模

從左至右
6a + b
a - b

從左至右
7<<
>>

按位左移

按位右移

從左至右
8<=>三向比較運(yùn)算符從左至右
9<
<=
>
>=
小于
小于或等于
大于
大于或等于
從左至右
10==
!=

等于

不相等

從左至右
11&按位與從左至右
12^按位異或從左至右
13|按位或從左至右
14&&邏輯與從左至右
15||邏輯或從左至右
16a ? b : c
throw
co_yield
=
+=
-=
*=
/=
%=
<<=
>>=
&=
^=
|=
三元條件運(yùn)算
throw 運(yùn)算符
yield 表達(dá)式(C++ 20)
賦值
加法賦值
減法賦值
乘法賦值
除法分配
模數(shù)賦值
按位左移賦值
按位右移賦值
按位與賦值
按位異或賦值
按位或賦值
從右至左
17,逗號運(yùn)算符從左至右

關(guān)聯(lián)性的屬性將在稍后討論。

C ++運(yùn)算符的關(guān)聯(lián)性

運(yùn)算符的關(guān)聯(lián)性是計(jì)算表達(dá)式的方向。例如,

int a = 1;
int b = 4;

// a = 4
a = b;

請看a=4;語句。 = 運(yùn)算符的關(guān)聯(lián)性是從右到左。 因此,b的值被賦值給a。

同樣,多個(gè)運(yùn)算符可以具有相同的優(yōu)先級(如上表所示)。在表達(dá)式中使用相同優(yōu)先級的多個(gè)運(yùn)算符時(shí),將根據(jù)它們的關(guān)聯(lián)性對它們進(jìn)行求值。

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

運(yùn)算符+=和-=運(yùn)算符具有相同的優(yōu)先級。由于這些運(yùn)算符的關(guān)聯(lián)性是從右到左,因此這是最后一條語句的求值方式。

  • a -= 6 首先評估。因此,a將為-5

  • 然后,b += -5將被評估。因此,b將為-1

示例2:運(yùn)算符的關(guān)聯(lián)性

#include <iostream>
using namespace std;

int main() {
  int a = 1;
  int b = 4;

// a -= 6 首先進(jìn)行評估
  b += a -= 6;

  cout << "a = " << a << endl; ;
  cout << "b = " << b;
}

輸出結(jié)果

a = -5
b = -1

                                                                                               

丰满人妻一级特黄a大片,午夜无码免费福利一级,欧美亚洲精品在线,国产婷婷成人久久Av免费高清