English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

تعليمية C++ الأساسية

تحكم في مسار محول ++

وظيفة C++

مجموعات محول ++ & 字ائن

هياكل بيانات محول ++

مفاهيم محول ++ & الأشياء

الـ

الوراثة C++

دليل STL C++

دليل محول ++

مستوى أفضلية وظائف وروابط محول ++

في هذا الدرس، سنستخدم الأمثلة لفهم مستوى أفضلية وظائف محول ++ وروابطها.

مستوى أفضلية وظائف محول ++

إذا كان هناك عدة وظائف في تعبير واحد، فإنها لن تُقييم في نفس الوقت. على العكس من ذلك، سيتم تقييم وظائف التي لهامستوى أفضلية عاليسيتم تقييم وظائفه أولاً.

دعونا نرى مثالاً:

int x = 5 - 17 * 6;

في هذا السياق، مستوى أفضلية عملاق الضرب * أعلى من مستوى أفضلية عملاق الطرح -، لذا يتم تقييم 17 * 6 أولاً.

نتيجة لذلك، تعادل التعبيرات التالية

int x = 5 - (17 * 6);

إذا أردنا تقييم 5 - 17 أولاً، فيجب أن نضعها فيداخل الأقواس:

int x = (5 - 17) * 6;

مثال 1: مستوى أفضلية وظائف

#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::مجال التطبيقمن اليسار إلى اليمين
2a++
a--
type( )
type{ }
a( )
a[ ]
.
->
زيادة/تقليل السطر/السطر
تقليل/زيادة السطر/السطر

تحويل نمط دالة

تحويل نمط دالة

نداء دالة
مؤشر
زيارة العضو من خلال العنصر
زيارة العضو من خلال العنصر ptr
من اليسار إلى اليمين
3++a
--a
+a
-a
!
~
(type)
*a
&a
sizeof
co_await
new new[ ]
delete delete[]
مقدمة زيادة
مقدمة إنقاص
إيجابي
سالب
غير منطقي
غير مباشرة
تحويل نمط C
إشارة غير مباشرة (تحويل)
ال عنوان
الحجم
عبارة await
تخصيص الذاكرة الديناميكية
تحرير الذاكرة الديناميكية
من اليمين إلى اليسار
4.*
->*

مثل عضو

مؤشر عضو

من اليسار إلى اليمين
5a * b
a / b
a % b

ضرب

تقسيم

استخراج الباقي

من اليسار إلى اليمين
6a + b
a - b
إضافة
طرح
من اليسار إلى اليمين
7<<
>>

حركة إلى اليسار

حركة إلى اليمين

من اليسار إلى اليمين
8<=>عمودية مقارنة ثلاثيةمن اليسار إلى اليمين
9<
<=
>
>=
أصغر
أصغر أو يساوي
أكبر
أكبر أو يساوي
من اليسار إلى اليمين
10==
!=

متساوي

غير متساوي

من اليسار إلى اليمين
11&وجوديمن اليسار إلى اليمين
12^كسر حرفيمن اليسار إلى اليمين
13|أو حرفيمن اليسار إلى اليمين
14&&و منطقيمن اليسار إلى اليمين
15||أو منطقيمن اليسار إلى اليمين
16a ? b : c
throw
co_yield
=
+=
-=
*=
/=
%=
<<=
>>=
&=
^=
|=
عمودية ثنائي الحالة
عمودية throw
عبارة yield (C++ 20)
تخصيص
تخصيص أوصاف الإضافة
تخصيص أوصاف الطرح
تخصيص أوصاف الضرب
تخصيص أوصاف التقسيم
تخصيص أوصاف الباقي
تخصيص أوصاف الحركة إلى اليسار
تخصيص أوصاف الحركة إلى اليمين
تخصيص أوصاف الجمع
تخصيص أوصاف الجمع
تخصيص أوصاف الحساب
من اليمين إلى اليسار
17,عنصر الكومامن اليسار إلى اليمين

الاتصالسنتحدث عن خصائصها لاحقًا.

اتصال عمليات C++

الاتصال في العناصر الحسابية هو حساب التعبيراتجاهعلى سبيل المثال،

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

مثال2: تتابع العمليات الحسابية

#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