المعاملات في لغتي C و C++
هذه قائمة بالمعاملات في لغتي البرمجة C و C++ .
جميع المعاملات المذكورة مكتوبة بلغة C++، وما لم يُذكر خلاف ذلك، فهي مكتوبة بلغة C أيضًا. تتضمن بعض الجداول عمودًا بعنوان "مكتوب بلغة C" يُشير إلى ما إذا كان المعامل مكتوبًا بلغة C أيضًا. تجدر الإشارة إلى أن لغة C لا تدعم تحميل المعاملات الزائد .
عندما لا يتم تحميلها بشكل زائد، بالنسبة للمعاملات &&، ||و ,( معامل الفاصلة )، توجد نقطة تسلسل بعد تقييم المعامل الأول.
معظم العوامل المتاحة في لغتي C و C++ متاحة أيضًا في لغات أخرى من عائلة C مثل C# و D و Java و Perl و PHP بنفس الأسبقية والترابط والدلالات.
تُعرف العديد من المعاملات المحددة بتسلسل من الرموز باسم يتألف من اسم كل رمز. على سبيل المثال، يُطلق على +=و -=غالبًا اسم "الجمع والتساوي" و"الطرح والتساوي"، بدلاً من المصطلحات الأكثر تفصيلاً مثل "الإسناد بالجمع" و"الإسناد بالطرح".
المشغلون
في الجداول التالية، تمثل الأحرف الصغيرة مثل و aالقيم bالحرفية، أو أسماء الكائنات / المتغيرات، أو القيم الحرفية، حسب الاقتضاء . Rو ...STK
الحساب
تحتوي لغتا C و C++ على نفس عوامل التشغيل الحسابية ويمكن إعادة تحميلها جميعًا في لغة C++.
| عملية | بناء الجملة | نموذج أولي بلغة C++ | ||
|---|---|---|---|---|
| في الصف K | خارج الفصل الدراسي | |||
| إضافة | a + b | RK::operator+(Sb); | Roperator+(Ka,Sb); | |
| الطرح | a - b | RK::operator-(Sb); | Roperator-(Ka,Sb); | |
| الجمع الأحادي ؛ ترقية عدد صحيح | +a | RK::operator+(); | Roperator+(Ka); | |
| الطرح الأحادي؛ المعكوس الجمعي | -a | RK::operator-(); | Roperator-(Ka); | |
| الضرب | a * b | RK::operator*(Sb); | Roperator*(Ka,Sb); | |
| قسم | a / b | RK::operator/(Sb); | Roperator/(Ka,Sb); | |
| Modulo [ a ] | a % b | RK::operator%(Sb); | Roperator%(Ka,Sb); | |
| زيادة البادئة | ++a | R&K::operator++(); | R&operator++(K&a); | |
| زيادة لاحقة | a++ | RK::operator++(int);[ ب ] | Roperator++(K&a,int);[ ب ] | |
| انخفاض البادئة | --a | R&K::operator--(); | R&operator--(K&a); | |
| التناقص اللاحق | a-- | RK::operator--(int);[ ب ] | Roperator--(K&a,int);[ ب ] | |
العلاقات
يمكن إعادة تعريف جميع عوامل المقارنة في لغة C++. منذ إصدار C++20 ، يتم إنشاء عامل عدم المساواة تلقائيًا إذا operator==تم تعريفه، ويتم إنشاء جميع عوامل المقارنة الأربعة تلقائيًا إذا operator<=>تم تعريفها. [ 1 ]
| عملية | بناء الجملة | شركة | نموذج أولي بلغة C++ | ||
|---|---|---|---|---|---|
| في الصف K | خارج الفصل الدراسي | ||||
| يساوي | a == b | نعم | boolK::operator==(Sconst&b)const; | booloperator==(Kconst&a,Sconst&b); | |
| لا يساوي | a != b | نعم | boolK::operator!=(Sconst&b)const; | booloperator!=(Kconst&a,Sconst&b); | |
| أكبر من | a > b | نعم | boolK::operator>(Sconst&b)const; | booloperator>(Kconst&a,Sconst&b); | |
| أقل من | a < b | نعم | boolK::operator<(Sconst&b)const; | booloperator<(Kconst&a,Sconst&b); | |
| أكبر من أو يساوي | a >= b | نعم | boolK::operator>=(Sconst&b)const; | booloperator>=(Kconst&a,Sconst&b); | |
| أقل من أو يساوي | a <= b | نعم | boolK::operator<=(Sconst&b)const; | booloperator<=(Kconst&a,Sconst&b); | |
| مقارنة ثلاثية [ ج ] [ د ] | a <=> b | لا | autoK::operator<=>(constS&b); | autooperator<=>(constK&a,constS&b); | |
منطقي
تحتوي لغتا C و C++ على نفس عوامل التشغيل المنطقية، ويمكن إعادة تعريفها جميعًا في لغة C++.
تجدر الإشارة إلى أنه لا يُنصح بتحميل المعاملات المنطقية AND و OR بشكل زائد، لأنها كعوامل محملة بشكل زائد تقوم دائمًا بتقييم كلا المعاملين بدلاً من توفير الدلالات العادية لتقييم الدائرة المختصرة . [ 2 ]
| عملية | بناء الجملة | نموذج أولي بلغة C++ | ||
|---|---|---|---|---|
| في الصف K | خارج الفصل الدراسي | |||
| لا | !a | boolK::operator!(); | booloperator!(Ka); | |
| و | a && b | boolK::operator&&(Sb); | booloperator&&(Ka,Sb); | |
| أو | a || b | boolK::operator||(Sb); | booloperator||(Ka,Sb); | |
بت
تحتوي لغتا C و C++ على نفس عوامل التشغيل الثنائية ويمكن إعادة تحميلها جميعًا في C++.
| عملية | بناء الجملة | نموذج أولي بلغة C++ | ||
|---|---|---|---|---|
| في الصف K | خارج الفصل الدراسي | |||
| لا | ~a | RK::operator~(); | Roperator~(Ka); | |
| و | a & b | RK::operator&(Sb); | Roperator&(Ka,Sb); | |
| أو | a | b | RK::operator|(Sb); | Roperator|(Ka,Sb); | |
| XOR | a ^ b | RK::operator^(Sb); | Roperator^(Ka,Sb); | |
| انقل إلى اليسار [ e ] | a << b | RK::operator<<(Sb); | Roperator<<(Ka,Sb); | |
| انقل إلى اليمين [ هـ ] [ و ] | a >> b | RK::operator>>(Sb); | Roperator>>(Ka,Sb); | |
تكليف
تتشابه لغتا C و C++ في عوامل التعيين، ويمكن إعادة تحميل جميعها في لغة C++.
بالنسبة لعوامل التركيب، a ⊚= b(حيث ⊚يمثل عملية) مكافئ لـ a = a ⊚ b، باستثناء أن aيتم تقييمه مرة واحدة فقط.
| عملية | بناء الجملة | نموذج أولي بلغة C++ | |
|---|---|---|---|
| في الصف K | خارج الفصل الدراسي | ||
| تكليف | a = b | R&K::operator=(Sb); | غير متوفر |
| تركيبة الجمع | a += b | R&K::operator+=(Sb); | R&operator+=(K&a,Sb); |
| عملية الطرح | a -= b | R&K::operator-=(Sb); | R&operator-=(K&a,Sb); |
| عملية الضرب | a *= b | R&K::operator*=(Sb); | R&operator*=(K&a,Sb); |
| مجموعة القسمة | a /= b | R&K::operator/=(Sb); | R&operator/=(K&a,Sb); |
| تركيبة المودولو | a %= b | R&K::operator%=(Sb); | R&operator%=(K&a,Sb); |
| عملية AND الثنائية | a &= b | R&K::operator&=(Sb); | R&operator&=(K&a,Sb); |
| عملية الجمع المنطقي OR الثنائي | a |= b | R&K::operator|=(Sb); | R&operator|=(K&a,Sb); |
| عملية XOR الثنائية | a ^= b | R&K::operator^=(Sb); | R&operator^=(K&a,Sb); |
| مجموعة عمليات الإزاحة الثنائية إلى اليسار | a <<= b | R&K::operator<<=(Sb); | R&operator<<=(K&a,Sb); |
| عملية الإزاحة الثنائية لليمين [ g ] | a >>= b | R&K::operator>>=(Sb); | R&operator>>=(K&a,Sb); |
عضو ومؤشر
| عملية | بناء الجملة | يمكن التحميل الزائد | شركة | نموذج أولي بلغة C++ | ||
|---|---|---|---|---|---|---|
| في الصف K | خارج الفصل الدراسي | |||||
| رمز سفلي | a[b]a<:b:>[ 4 ] | نعم | نعم | R&K::operator[](Sb);R&K::operator[](Sb,...);[ ح ] | غير متوفر | |
| التوجيه غير المباشر (الكائن المشار إليه بواسطة ) | *a | نعم | نعم | R&K::operator*(); | R&operator*(Ka); | |
| عنوان (عنوان أ ) | &a | نعم [ i ] | نعم | R*K::operator&(); | R*operator&(Ka); | |
| إلغاء مرجعية البنية (العضو b من الكائن الذي يشير إليه a ) | a->b | نعم | نعم | R*K::operator->();[ j ] | غير متوفر | |
| مرجع البنية (العضو ب من الكائن أ ) | a.b | لا | نعم | غير متوفر | ||
| العضو المحدد بواسطة المؤشر إلى العضو b للكائن الذي يشير إليه a [ k ] | a->*b | نعم | لا | R&K::operator->*(Sb); | R&operator->*(Ka,Sb); | |
| تم تحديد عضو من الكائن أ بواسطة مؤشر إلى العضو ب | a.*b | لا | لا | غير متوفر | ||
آخر
| عملية | بناء الجملة | يمكن التحميل الزائد | شركة | نموذج أولي بلغة C++ | ||
|---|---|---|---|---|---|---|
| في الصف K | خارج الفصل الدراسي | |||||
| استدعاء الدالة | a(a1, a2) | نعم | نعم | RK::operator()(Sa,Tb,...); | غير متوفر | |
| فاصلة | a, b | نعم | نعم | RK::operator,(Sb); | Roperator,(Ka,Sb); | |
| الشرط الثلاثي | a ? b : c | لا | نعم | غير متوفر | ||
| دقة النطاق | a::b[ ل ] | لا | لا | غير متوفر | ||
| القيم الحرفية المعرفة من قبل المستخدم [ م ] [ ن ] | "a"_b | نعم | لا | غير متوفر | Roperator""_b(Ta) | |
| حجم | sizeof a[ o ]sizeof (R) | لا | نعم | غير متوفر | ||
| حجم حزمة المعلمات [ ن ] | sizeof...(Args) | لا | لا | غير متوفر | ||
| Alignof [ n ] | alignof(R) أو _Alignof(R)[ ص ] | لا | نعم | غير متوفر | ||
| نوع [ q ] | typeof(a)typeof(R)typeof_unqual(a)typeof_unqual(R) | غير متوفر | نعم | غير متوفر | ||
| Decltype [ n ] | decltype(a)decltype(R) | لا | لا | غير متوفر | ||
| تحديد النوع | typeid(a)typeid(R) | لا | لا | غير متوفر | ||
| التحويل (صب على النمط C) | (R)a | نعم | نعم | K::operatorR();[ 5 ] | غير متوفر | |
| التحويل [ r ] [ 6 ] | R(a)R{a}[ ن ] auto(a)[ ح ] auto{a}[ ح ] | لا | لا | غير متوفر | ||
| تحويل static_cast [ s ] | static_cast<R>(a) | نعم | لا | K::operatorR();explicitK::operatorR();[ ن ] | غير متوفر | |
| تحويل البث الديناميكي | dynamic_cast<R>(a) | لا | لا | غير متوفر | ||
| تحويل const_cast | const_cast<R>(a) | لا | لا | غير متوفر | ||
| إعادة تفسير التحويل | reinterpret_cast<R>(a) | لا | لا | غير متوفر | ||
| تخصيص الذاكرة | new R[ t ] | نعم | لا | void*K::operatornew(size_tx); | void*operatornew(size_tx); | |
| تخصيص مصفوفة | new R[n][ u ] | نعم | لا | void*K::operatornew[](size_ta); | void*operatornew[](size_ta); | |
| إلغاء تخصيص الذاكرة | delete a | نعم | لا | voidK::operatordelete(void*a); | voidoperatordelete(void*a); | |
| إلغاء تخصيص المصفوفة | delete[] a | نعم | لا | voidK::operatordelete[](void*a); | voidoperatordelete[](void*a); | |
noexceptالبند [ ن ] | noexcept(a) | لا | لا | غير متوفر | ||
requiresالبند [ ن ] | requires (a) | لا | لا | غير متوفر | ||
| الانعكاس [ v ] | ^^a | لا | لا | غير متوفر | ||
المرادفات
تُعرّف لغة C++ الكلمات الرئيسية لتكون بمثابة أسماء بديلة لعدد من المعاملات: [ 7 ]
| الكلمة المفتاحية | المشغل |
|---|---|
and | && |
and_eq | &= |
bitand | & |
bitor | | |
compl | ~ |
not | ! |
not_eq | != |
or | || |
or_eq | |= |
xor | ^ |
xor_eq | ^= |
كل كلمة مفتاحية هي طريقة مختلفة لتحديد عامل، وبالتالي يمكن استخدامها بدلاً من الصيغة الرمزية المقابلة. على سبيل المثال، تُحدد الكلمتان المفتاحيتان (a > 0 and not flag)و (a > 0 && !flag)السلوك نفسه. كمثال آخر، bitandيمكن استخدام الكلمة المفتاحية لاستبدال عامل "و" الثنائي، وكذلك عامل "عنوان" ، ويمكن استخدامها لتحديد أنواع المراجع (مثل int bitand ref = n).
تسمح مواصفات ISO للغة C باستخدام هذه الكلمات المفتاحية كوحدات ماكرو للمعالج المسبق في ملف الرأس iso646.h. ولضمان التوافق مع لغة C، توفر لغة C++ أيضًا ملف رأس iso646.h، إلا أن تضمينه لا يُحدث أي تغيير. وحتى إصدار C++20، كانت توفر أيضًا ملف رأس مماثل، ciso646والذي لم يكن له أي تغيير أيضًا.
ترتيب تقييم التعبير
أثناء تقييم التعبيرات، يُحدد ترتيب تقييم التعبيرات الفرعية بناءً على الأسبقية والترابط . يُقيّم العامل ذو الأسبقية الأعلى قبل العامل ذي الأسبقية الأقل، وتُقيّم معاملات العامل بناءً على الترابط. يوضح الجدول التالي أسبقية وترابط عوامل C وC++. تُعرض العوامل في مجموعات متساوية الأسبقية، وتُرتب المجموعات تنازليًا حسب الأسبقية من الأعلى إلى الأسفل (الترتيب الأدنى يعني أسبقية أعلى). [ 8 ] [ 9 ] [ 10 ]
لا تتأثر أسبقية العمليات بالتحميل الزائد.
| طلب | المشغل | وصف | الترابط |
|---|---|---|---|
| 1 أعلى مستوى | :: | دقة النطاق (لغة C++ فقط) | لا أحد |
| 2 | ++ | زيادة لاحقة | من اليسار إلى اليمين |
-- | التناقص اللاحق | ||
() | استدعاء الدالة | ||
[] | فهرسة المصفوفات | ||
. | تحديد العنصر بالمرجع | ||
-> | تحديد العناصر باستخدام المؤشر | ||
typeid() | معلومات نوع وقت التشغيل (لغة C++ فقط) (انظر typeid ) | ||
const_cast | تحويل النوع (لغة C++ فقط) (انظر const_cast ) | ||
dynamic_cast | تحويل النوع (لغة C++ فقط) (انظر التحويل الديناميكي ) | ||
reinterpret_cast | تحويل النوع (لغة C++ فقط) (انظر reinterpret_cast ) | ||
static_cast | تحويل النوع (لغة C++ فقط) (انظر static_cast ) | ||
| 3 | ++ | زيادة البادئة | من اليمين إلى اليسار |
-- | انخفاض البادئة | ||
+ | أحادي زائد | ||
- | أحادي ناقص | ||
! | النفي المنطقي | ||
~ | النفي الثنائي ( متمم الواحدات ) | ||
(type) | نوع التحويل | ||
* | الإحالة غير المباشرة (إلغاء الإحالة) | ||
& | عنوان | ||
sizeof | حجم | ||
_Alignof | متطلبات المحاذاة (منذ الإصدار C11) | ||
new،new[] | تخصيص الذاكرة الديناميكي (لغة C++ فقط) | ||
delete،delete[] | إلغاء تخصيص الذاكرة الديناميكي (لغة C++ فقط) | ||
| 4 | .* | مؤشر إلى عضو (لغة C++ فقط) | من اليسار إلى اليمين |
->* | مؤشر إلى عضو (لغة C++ فقط) | ||
| 5 | * | الضرب | من اليسار إلى اليمين |
/ | قسم | ||
% | باقي القسمة ( modulo ) | ||
| 6 | + | إضافة | من اليسار إلى اليمين |
- | الطرح | ||
| 7 | << | إزاحة بتية يسارية | من اليسار إلى اليمين |
>> | إزاحة بتية لليمين | ||
| 8 | <=> | مقارنة ثلاثية (تم تقديمها في C++20 - C++ فقط) | من اليسار إلى اليمين |
| 9 | < | أقل من | من اليسار إلى اليمين |
<= | أقل من أو يساوي | ||
> | أكبر من | ||
>= | أكبر من أو يساوي | ||
| 10 | == | يساوي | من اليسار إلى اليمين |
!= | لا يساوي | ||
| 11 | & | عملية AND الثنائية | من اليسار إلى اليمين |
| 12 | ^ | عملية XOR الثنائية (أو الحصرية) | من اليسار إلى اليمين |
| 13 | | | عملية OR الثنائية (أو الشاملة) | من اليسار إلى اليمين |
| 14 | && | منطقي و | من اليسار إلى اليمين |
| 15 | || | أو المنطقي | من اليسار إلى اليمين |
| 16 | co_await | معالجة الروتينات الفرعية (لغة C++ فقط) | من اليمين إلى اليسار |
co_yield | |||
| 17 | ?: | عامل الشرط الثلاثي | من اليمين إلى اليسار |
= | التعيين المباشر | ||
+= | التخصيص حسب المجموع | ||
-= | التوزيع بالفرق | ||
*= | التعيين حسب المنتج | ||
/= | التوزيع عن طريق القسمة | ||
%= | التخصيص بالباقي | ||
<<= | التعيين عن طريق الإزاحة الثنائية إلى اليسار | ||
>>= | التعيين عن طريق الإزاحة الثنائية لليمين | ||
&= | التعيين بواسطة عملية AND الثنائية | ||
^= | التعيين بواسطة عملية XOR الثنائية | ||
|= | التعيين بواسطة عملية OR الثنائية | ||
throw | عامل الرمي (رمي الاستثناءات، خاص بلغة C++ فقط) | ||
| 18 الأدنى | , | فاصلة | من اليسار إلى اليمين |
تفاصيل
على الرغم من أن هذا الجدول كافٍ لوصف معظم ترتيب التقييم، إلا أنه لا يوضح بعض التفاصيل. يسمح عامل الشرط الثلاثي بأي تعبير عشوائي كمعامل أوسط، على الرغم من إدراجه كعامل ذي أسبقية أعلى من عاملي الإسناد والفاصلة. وبالتالي، يُفسَّر على أنه ، وليس على أنه التعبير غير ذي المعنى . لذلك، يُحلَّل التعبير الموجود في منتصف عامل الشرط (بين و ) كما لو كان بين قوسين. كذلك، لا يمكن أن تكون النتيجة المباشرة غير المقوسة لتعبير تحويل C هي معاملًا لـ . لذلك، يُفسَّر على أنه ، وليس .a ? b, c : da ? (b, c) : d(a ? b), (c : d)?:sizeofsizeof (int) * x(sizeof(int)) * xsizeof ((int) * x)
تعابير متسلسلة
يحدد جدول الأسبقية ترتيب الربط في التعبيرات المتسلسلة، عندما لا يتم تحديده صراحةً بواسطة الأقواس.
- على سبيل المثال،
++x*3يكون التعبير غامضًا بدون قاعدة أو قواعد أسبقية. يوضح لنا جدول الأسبقية أن: x مرتبط بـ ++ بشكل أقوى من ارتباطه بـ * ، بحيث أن أيًا كان ما يفعله ++ (الآن أو لاحقًا - انظر أدناه)، فإنه يفعله فقط مع x (وليس مع * )؛ وهو ما يعادل ( , ).x*3++xx*3 - وبالمثل، مع
3*x++، حيث أن عامل الزيادة ++ مصمم للعمل بعد تقييم التعبير بأكمله، إلا أن جدول الأسبقية يوضح أن x فقط هو الذي يتم زيادته (وليس ). في الواقع، يتم تقييم التعبير ( , ) مع كون tmp قيمة مؤقتة. وهو مكافئ وظيفيًا لشيء مثل ( , , ).3*xtmp=x++3*tmptmp=3*x++xtmp

- بغض النظر عن مسألة الأسبقية أو الربط، انظر إلى الرسم التخطيطي أعلاه للتعبير 3+2*y[i]++. مهمة المترجم هي تحويل الرسم التخطيطي إلى تعبير تتنافس فيه عدة عوامل أحادية (لنسميها 3+( . )، 2*( . )، ( . )++ و( . )[ i ]) للربط بالمتغير y. يحدد جدول ترتيب الأسبقية التعبير الفرعي النهائي الذي يؤثر عليه كل عامل: ( . )[ i ] يؤثر فقط على y، و( . )++ يؤثر فقط على y[i]، و2*( . ) يؤثر فقط على y[i]++، و3+( . ) يؤثر فقط على 2*((y[i])++). يتضح من جدول الأسبقية أي تعبير فرعي يؤثر عليه كل عامل، لكن توقيت تأثير كل عامل غير محدد في جدول الأسبقية. في هذا المثال، يعمل عامل ( . )++ فقط على y[i] وفقًا لقواعد الأسبقية، لكن مستويات الربط وحدها لا تشير إلى توقيت اللاحقة ++ (يعمل عامل ( . )++ فقط بعد تقييم y[i] في التعبير).
ملزم
يتم تحديد ربط المعاملات في لغتي C و C++ بواسطة قواعد اللغة المُجزأة، وليس بواسطة جدول أسبقية. وهذا يُسبب بعض التعارضات الدقيقة. على سبيل المثال، في لغة C، تكون صيغة التعبير الشرطي كما يلي:
تعبير منطقي - أو - ؟ تعبير : تعبير شرطيأما في لغة C++ فهو كالتالي:
تعبير منطقي - أو - ؟ تعبير : تعيين - تعبيرومن ثمّ، فإنّ التعبير هو:
إذا كان e = a < d، فإن a++، وإلا فإن a = d يتم تحليلها بشكل مختلف في اللغتين. في لغة C، يُعد هذا التعبير خطأً في بناء الجملة، لأن بناء جملة تعبير الإسناد في لغة C هو:
تعبير أحادي - '=' إسناد - تعبيرفي لغة C++، يتم تحليلها على النحو التالي:
e = ( a < d ? a ++ : ( a = d ))لاستخدام عامل الفاصلة في تعبير وسيط استدعاء دالة، أو إسناد متغير، أو قائمة مفصولة بفواصل، يلزم استخدام الأقواس. [ 13 ] [ 14 ] على سبيل المثال،
int a = 1 , b = 2 , weirdVariable = ( ++ a , b ), d = 4 ;انتقاد أسبقية عوامل التشغيل الثنائية والمساواة
لقد تم انتقاد أولوية عوامل التشغيل المنطقية الثنائية. [ 15 ] من الناحية المفاهيمية، فإن & و | هما عاملان حسابيان مثل * و +.
يتم تحليل التعبير نحويًا على النحو التالي: بينما يتم تحليل التعبير على النحو التالي : . وهذا يتطلب استخدام الأقواس بشكل أكثر تكرارًا مما هو معتاد.a&b==7a&(b==7)a+b==7(a+b)==7
تاريخيًا، لم يكن هناك تمييز نحوي بين عوامل التشغيل المنطقية وعوامل التشغيل الثنائية. في لغات BCPL و B وC المبكرة، لم تكن هذه العوامل موجودة. بل كان لها معانٍ مختلفة اعتمادًا على استخدامها في سياق قيمة منطقية (أي عندما يُتوقع قيمة منطقية، على سبيل المثال، في BCPL B كان يعمل كعامل تشغيل منطقي، بينما في BCPL C كان يعمل كعامل تشغيل ثنائي). وقد تم الإبقاء على هذا التمييز للحفاظ على التوافق مع الإصدارات السابقة. [ 16 ]&&||&|if(a==b&c){...}c=a&b
علاوة على ذلك، في لغة C++ (والإصدارات اللاحقة من لغة C) فإن عمليات المساواة، باستثناء عامل المقارنة الثلاثي، تنتج قيمًا من النوع المنطقي والتي هي من الناحية المفاهيمية بت واحد (1 أو 0) وبالتالي لا تنتمي بشكل صحيح إلى عمليات "البت".
ملحوظات
- ↑ يدعم عامل باقي القسمة معاملات الأعداد الصحيحة فقط؛ أما بالنسبة للأعداد العشرية، فيمكن استخدامدالة مثل هذه
fmod - 1 2 3 4 هذا
intمُعامل وهمي للتمييز بين البادئة واللاحقة. - ↑ حول مقارنة ثلاثية الاتجاهات حول C++20
- ↑ أنواع الإرجاع الممكنة:
std::weak_ordering،std::strong_orderingوالتيstd::partial_orderingيمكن تحويلها جميعًا إليها. - 1 2 في سياق iostreams في C++، غالبًا ما يشير الكتّاب إلى
<<و>>على أنهما عاملي "put-to" أو "stream insertion" و "get-from" أو "stream extracting" على التوالي. - ↑ وفقًا لمعيار C99، فإن الإزاحة إلى اليمين لعدد سالب تعتمد على التنفيذ.تستخدم معظم التطبيقات، مثل GCC، [ 3 ] إزاحة حسابية (أي تمديد الإشارة)، ولكنمن الممكن أيضًا استخدام إزاحة منطقية .
- ↑ وفقًا لمعيار C99، فإن الإزاحة إلى اليمين لعدد سالب تعتمد على التنفيذ.تستخدم معظم التطبيقات، مثل GCC، [ 3 ] إزاحة حسابية (أي تمديد الإشارة)، ولكنمن الممكن أيضًا استخدام إزاحة منطقية .
- 1 2 3 منذ C++23
- ↑ يمكن الحصول علىالعنوان الفعلي للكائن ذي التحميل الزائد
operator &std::addressof - ↑ يجب أن يكون نوع الإرجاعنوعًايمكن تطبيق العملية عليه، مثل نوع المؤشر. إذاكان من النوعالذيالدوال الزائدة،فسيتم توسيعه إلى.
operator->()->xCCoperator->()x->yx.operator->()->y - ↑ مايرز، سكوت (أكتوبر 1999)، "تنفيذ عامل التشغيل -> * للمؤشرات الذكية" (ملف PDF) ، مجلة دكتور دوبز ، أريستيا.
- ↑ على الرغم من
::وجود علامة ترقيم في لغة C اعتبارًا من الإصدار C23، إلا أنها لا تُستخدم كعامل تحديد نطاق. - ↑ حول القيم الحرفية المعرفة من قبل المستخدم في C++11
- 1 2 3 4 5 6 7 8 منذ C++11
- ↑ لا تُستخدم الأقواس عند حساب حجم قيمة، وإنما فقط عند حساب حجم نوع بيانات. ومع ذلك، تُستخدم عادةً في جميع الأحوال.
- ↑ تُعرّف لغة C++
alignofالمعامل، بينما تُعرّف لغة C المعامل_Alignof(وتُعرّف لغة C23 كلا المعاملين). للمعاملين نفس الدلالة. - ↑ منذ C23؛ غير موجود في لغة C++ القياسية
- ↑ يتصرف مثل const_cast/static_cast/reinterpret_cast. في الحالتين الأخيرتين،
autoيتم استبدال المحدد بنوع المتغير المُخترع x المُعلن عنه باستخدامauto x(a);(والذي لا يُفسر أبدًا على أنه تعريف دالة) أوauto x{a};، على التوالي. - ↑ بالنسبة للتحويلات التي يحددها المستخدم، فإن نوع الإرجاع يتطابق ضمنيًا وبالضرورة مع اسم المعامل ما لم يتم استنتاج النوع (على سبيل المثال،إلخ).
operatorauto()operatordecltype(auto)() - ↑ يمكن أيضًا استنتاج اسم النوع (على سبيل المثال
new auto) إذا تم توفير مُهيئ. - ↑ يمكن أيضًا استنتاج حجم المصفوفة إذا تم توفير مُهيئ.
- ↑ منذ C++26
انظر أيضاً
- العمليات الثنائية في لغة C – عمليات تحويل البتات الفردية لأنواع البيانات الصحيحة
- التلاعب بالبتات – تعديل البيانات خوارزميًا على مستوى أدنى من مستوى الكلمة
- عامل منطقي – رمز يربط الصيغ في المنطق. صفحات تعرض أوصافًا مختصرة لأهداف إعادة التوجيه.
- الجبر البولياني (المنطق) – معالجة جبرية لـ "صحيح" و"خطأ" صفحات تعرض أوصافًا مختصرة لأهداف إعادة التوجيه
- جدول رموز المنطق – قائمة بالرموز المستخدمة للتعبير عن العلاقات المنطقية. صفحات تعرض أوصافًا مختصرة لأهداف إعادة التوجيه.
مراجع
- ↑ "تحميل زائد على المشغلين § مقارنة المشغلين" . cppreference.com .
- ↑ "Standard C++" .
- 1 2 "تنفيذ الأعداد الصحيحة"، GCC 4.3.3 ، GNU.
- ↑ "مواصفات ISO/IEC 9899:1999، TC3" (PDF) . ص 64، § 6.4.6 علامات الترقيم ، الفقرة 3.
- ↑ "تحويل مُعرَّف من قِبل المستخدم" . تم الاطلاع عليه بتاريخ 5 أبريل 2020 .
- ↑ التحويل الصريح للأنواع في لغة C++
- ↑ ISO/IEC 14882:1998(E) لغة البرمجة C++ . open-std.org – لجنة معايير C++. 1 سبتمبر 1998. الصفحات 40-41 .
- ↑ ISO/IEC 9899:201x لغات البرمجة - C. open-std.org – لجنة معايير لغة C. 19 ديسمبر 2011. ص 465.
- ↑ معيار ISO C 1999، القسم 6.5.6، الملاحظة 71 (التقرير الفني). ISO. 1999.
- ↑ "المعاملات المضمنة في لغة C++، والأسبقية، والترابط" . docs.microsoft.com . تم الاطلاع عليه بتاريخ 11 مايو 2020 .
- ↑ "أسبقية عوامل التشغيل في لغة C - cppreference.com" . en.cppreference.com . تم الاطلاع عليه بتاريخ 10 أبريل 2020 .
- ↑ "هل يتمتع عامل الشرط الثلاثي في لغتي C/C++ بنفس أسبقية عوامل الإسناد؟" . Stack Overflow . تم الاطلاع عليه بتاريخ 22 سبتمبر 2019 .
- ↑ "عوامل تشغيل أخرى - cppreference.com" . en.cppreference.com . تم الاطلاع عليه بتاريخ 10 أبريل 2020 .
- ↑ "سي++ - كيف يعمل عامل الفاصلة؟" . موقع ستاك أوفرفلو . تم الاطلاع عليه في 1 أبريل 2020 .
- ↑ تاريخ C § حديثي الولادة C ، مختبرات بيل.
- ↑ "Re^10: شرط ما لم يتحقق الشرط التالي" . www.perlmonks.org . تم الاطلاع عليه بتاريخ 23 مارس 2018 .
روابط خارجية
- "المعاملات"، مرجع لغة C++ (ويكي).
- أسبقية عامل التشغيل C
- عوامل الزيادة والنقصان اللاحقة: ++ و -- (شبكة المطورين)، مايكروسوفت، 17 أغسطس 2021.
- لغة البرمجة سي
- لغة سي++
- المشغلون (البرمجة)
- مقارنة لغات البرمجة الفردية
