Dalam tutorial ini, kita akan belajar mengenai keutamaan dan kaitan operator di C ++ dengan bantuan contoh.
Keutamaan Pengendali C ++
Sekiranya terdapat beberapa operator dalam satu ungkapan, operasi tidak dinilai secara serentak. Sebaliknya, pengendali dengan keutamaan yang lebih tinggi membuat operasi mereka dinilai terlebih dahulu.
Mari kita pertimbangkan satu contoh:
int x = 5 - 17 * 6;
Di sini, pengendali pendaraban *
mempunyai tahap keutamaan yang lebih tinggi daripada pengendali pengurangan -
. Oleh itu, 17 * 6
dinilai terlebih dahulu.
Hasilnya, ungkapan di atas setara dengan
int x = 5 - (17 * 6);
Sekiranya kita ingin menilai 5 - 17
terlebih dahulu, maka kita mesti memasukkannya ke dalam kurungan :
int x = (5 - 17) * 6;
Contoh 1: Keutamaan Pengendali
#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; )
Pengeluaran
num1 = -97 num2 = -97 num3 = -72
Catatan: Oleh kerana terdapat banyak pengendali di C ++ dengan pelbagai tahap keutamaan, sangat disarankan agar kami menggunakan tanda kurung untuk menjadikan kod kami lebih mudah dibaca.
Jadual Keutamaan Pengendali C ++
Jadual berikut (diambil dari cppreference.com) menunjukkan keutamaan pengendali C ++. Tahap Keutamaan 1 menandakan pengendali keutamaan tertinggi, sementara Tahap Keutamaan 17 menandakan pengendali keutamaan terendah.
Harta persatuan akan dibincangkan sebentar lagi.
Keutamaan | Pengendali | Penerangan | Pergaulan |
---|---|---|---|
1 | :: | Penyelesaian Skop | Kiri ke kanan |
2 | a ++ a-- type () type () a () a () . -> | Penambahan akhiran / perbaikan akhiran Penurunan akhiran / perbaikan akhir Fungsi pelakon Fungsi pelakon Fungsi panggilan Langganan Akses anggota dari suatu objek Akses anggota dari objek ptr | Kiri ke kanan |
3 | ++ a --a + a -a ! ~ (Jenis) * a & a sizeof co_await baru baru () padam padam () | Awalan kenaikan awalan susutan unari plus minus unari Logical TIDAK Bitwise TIDAK gaya C membuang tipuan (dereference) Alamat-of Saiz-of menunggu-ungkapan peruntukan memori dinamik memori Dynamic deallocation | Kanan ke kiri |
4 | . * -> * | Pemilih objek ahli Pemilih penunjuk ahli | Kiri ke kanan |
5 | a * b a / b a% b | Modulus Bahagian Pendaraban | Kiri ke kanan |
6 | a + b a - b | Pengurangan Penambahan | Kiri ke kanan |
7 | << >> | Peralihan kiri Bitwise Pergeseran kanan Bitwise | Kiri ke kanan |
8 | <= < | Pengendali perbandingan tiga hala | Kiri ke kanan |
9 | < <= > > = | Kurang daripada Kurang daripada atau sama dengan Lebih besar daripada Lebih besar daripada atau sama dengan | Kiri ke kanan |
10 | == ! = | Sama dengan Tidak sama dengan | Kiri ke kanan |
11 | & | Sedikit demi sedikit DAN | Kiri ke kanan |
12 | ^ | Bitwise XOR | Kiri ke kanan |
13 | | | Sedikit demi sedikit ATAU | Kiri ke kanan |
14 | && | Logik DAN | Kiri ke kanan |
15 | || | Logik ATAU | Kiri ke kanan |
16 | a? b: c lontaran 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 ATAU Assignment | Kanan ke kiri |
17 | , | Pengendali koma | Kiri ke kanan |
Perkaitan Pengendali C ++
Keterkaitan operator adalah arah dari mana ungkapan dinilai. Sebagai contoh,
int a = 1; int b = 4; // a will be 4 a = b;
Lihat a = 4;
pernyataan. Keterkaitan =
operator adalah dari kanan ke kiri. Oleh itu, nilai b diberikan kepada a, dan bukan ke arah yang lain.
Juga, pelbagai pengendali boleh mempunyai tahap keutamaan yang sama (seperti yang dapat kita lihat dari jadual di atas). Apabila beberapa operator dengan tahap keutamaan yang sama digunakan dalam ungkapan, mereka dinilai mengikut kaitannya .
int a = 1; int b = 4; b += a -= 6;
Kedua-dua pengendali +=
dan -=
pengendali mempunyai keutamaan yang sama. Oleh kerana kaitan operator ini dari kanan ke kiri, berikut adalah bagaimana penyataan terakhir dinilai.
a -= 6
dinilai terlebih dahulu. Oleh itu, kehendak -5- Kemudian,
b += -5
akan dinilai. Oleh itu, b akan menjadi -1
Contoh 2: Kesatuan Pengendali
#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; )
Pengeluaran
a = -5 b = -1