English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
في هذا الدرس، سنستخدم الأمثلة لفهم مستوى أفضلية وظائف محول ++ وروابطها.
إذا كان هناك عدة وظائف في تعبير واحد، فإنها لن تُقييم في نفس الوقت. على العكس من ذلك، سيتم تقييم وظائف التي لهامستوى أفضلية عاليسيتم تقييم وظائفه أولاً.
دعونا نرى مثالاً:
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
ملاحظة:بسبب أن هناك العديد من وظائف محول ++ لها مستويات أفضلية متعددة، يُنصح بشدة باستخدامالمسافات البيضاءيصنع الكود أكثر قابلية للقراءة.
التالي يوضح جدول وظائف محول ++. مستوى الأفضلية 1 يعني وظيفة الأفضلية العالية، بينما مستوى الأفضلية 17 يعني وظيفة الأفضلية المنخفضة.
مستوى الأفضلية | وظائف | وصف | قاعدة التجميع |
---|---|---|---|
1 | :: | مجال التطبيق | من اليسار إلى اليمين |
2 | a++ a-- type( ) type{ } a( ) a[ ] . -> | زيادة/تقليل السطر/السطر تقليل/زيادة السطر/السطر تحويل نمط دالة تحويل نمط دالة نداء دالةمؤشر زيارة العضو من خلال العنصر زيارة العضو من خلال العنصر ptr | من اليسار إلى اليمين |
3 | ++a --a +a -a ! ~ (type) *a &a sizeof co_await new new[ ] delete delete[] | مقدمة زيادة مقدمة إنقاص إيجابي سالب غير منطقي غير مباشرة تحويل نمط C إشارة غير مباشرة (تحويل) ال عنوان الحجم عبارة await تخصيص الذاكرة الديناميكية تحرير الذاكرة الديناميكية | من اليمين إلى اليسار |
4 | .* ->* | مثل عضو مؤشر عضو | من اليسار إلى اليمين |
5 | a * b a / b a % b | ضرب تقسيم استخراج الباقي | من اليسار إلى اليمين |
6 | a + b a - b | إضافة طرح | من اليسار إلى اليمين |
7 | << >> | حركة إلى اليسار حركة إلى اليمين | من اليسار إلى اليمين |
8 | <=> | عمودية مقارنة ثلاثية | من اليسار إلى اليمين |
9 | < <= > >= | أصغر أصغر أو يساوي أكبر أكبر أو يساوي | من اليسار إلى اليمين |
10 | == != | متساوي غير متساوي | من اليسار إلى اليمين |
11 | & | وجودي | من اليسار إلى اليمين |
12 | ^ | كسر حرفي | من اليسار إلى اليمين |
13 | | | أو حرفي | من اليسار إلى اليمين |
14 | && | و منطقي | من اليسار إلى اليمين |
15 | || | أو منطقي | من اليسار إلى اليمين |
16 | a ? b : c throw co_yield = += -= *= /= %= <<= >>= &= ^= |= | عمودية ثنائي الحالة عمودية throw عبارة yield (C++ 20) تخصيص تخصيص أوصاف الإضافة تخصيص أوصاف الطرح تخصيص أوصاف الضرب تخصيص أوصاف التقسيم تخصيص أوصاف الباقي تخصيص أوصاف الحركة إلى اليسار تخصيص أوصاف الحركة إلى اليمين تخصيص أوصاف الجمع تخصيص أوصاف الجمع تخصيص أوصاف الحساب | من اليمين إلى اليسار |
17 | , | عنصر الكوما | من اليسار إلى اليمين |
الاتصالسنتحدث عن خصائصها لاحقًا.
الاتصال في العناصر الحسابية هو حساب التعبيراتجاهعلى سبيل المثال،
int a = 1; int b = 4; // a = 4 a = b;
انظر إلى جملة a=4؛. الاتصال بين عمودية = من اليمين إلى اليسار. لذلك، قيمة b يتم تخصيصها إلى a.
كذلك، يمكن أن يكون العديد من العناصر الحسابية لها نفس المستوى من الأهمية (كما هو موضح في الجدول أعلاه). عند استخدام العديد من العناصر الحسابية ذات المستوى نفسه في التعبير، سيتم حسابها بناءً علىالاتصالاعتمادًا على هذا.
int a = 1; int b = 4; b += a -= 6;
عناصر الحساب += و -= لها نفس المستوى من الأهمية. نظرًا لأن الاتصال بين هذه العناصر من اليمين إلى اليسار، فإن طريقة حساب هذه الجملة الأخيرة هي
a -= 6 أولاً التقييم. لذلك،a سيكون-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