المعاملات في لغتي 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 + bRK::operator+(Sb);Roperator+(Ka,Sb);
الطرحa - bRK::operator-(Sb);Roperator-(Ka,Sb);
الجمع الأحادي ؛ ترقية عدد صحيح+aRK::operator+();Roperator+(Ka);
الطرح الأحادي؛ المعكوس الجمعي-aRK::operator-();Roperator-(Ka);
الضربa * bRK::operator*(Sb);Roperator*(Ka,Sb);
قسمa / bRK::operator/(Sb);Roperator/(Ka,Sb);
Modulo [ a ]a % bRK::operator%(Sb);Roperator%(Ka,Sb);
زيادة البادئة++aR&K::operator++();R&operator++(K&a);
زيادة لاحقةa++RK::operator++(int);[ ب ]Roperator++(K&a,int);[ ب ]
انخفاض البادئة--aR&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خارج الفصل الدراسي
لا!aboolK::operator!();booloperator!(Ka);
وa && bboolK::operator&&(Sb);booloperator&&(Ka,Sb);
أوa || bboolK::operator||(Sb);booloperator||(Ka,Sb);

بت

تحتوي لغتا C و C++ على نفس عوامل التشغيل الثنائية ويمكن إعادة تحميلها جميعًا في C++.

عمليةبناء الجملةنموذج أولي بلغة C++
في الصف Kخارج الفصل الدراسي
لا~aRK::operator~();Roperator~(Ka);
وa & bRK::operator&(Sb);Roperator&(Ka,Sb);
أوa | bRK::operator|(Sb);Roperator|(Ka,Sb);
XORa ^ bRK::operator^(Sb);Roperator^(Ka,Sb);
انقل إلى اليسار [ e ]a << bRK::operator<<(Sb);Roperator<<(Ka,Sb);
انقل إلى اليمين [ هـ ] [ و ]a >> bRK::operator>>(Sb);Roperator>>(Ka,Sb);

تكليف

تتشابه لغتا C و C++ في عوامل التعيين، ويمكن إعادة تحميل جميعها في لغة C++.

بالنسبة لعوامل التركيب، a ⊚= b(حيث يمثل عملية) مكافئ لـ a = a ⊚ b، باستثناء أن aيتم تقييمه مرة واحدة فقط.

عمليةبناء الجملةنموذج أولي بلغة C++
في الصف Kخارج الفصل الدراسي
تكليفa = bR&K::operator=(Sb);غير متوفر
تركيبة الجمعa += bR&K::operator+=(Sb);R&operator+=(K&a,Sb);
عملية الطرحa -= bR&K::operator-=(Sb);R&operator-=(K&a,Sb);
عملية الضربa *= bR&K::operator*=(Sb);R&operator*=(K&a,Sb);
مجموعة القسمةa /= bR&K::operator/=(Sb);R&operator/=(K&a,Sb);
تركيبة المودولوa %= bR&K::operator%=(Sb);R&operator%=(K&a,Sb);
عملية AND الثنائيةa &= bR&K::operator&=(Sb);R&operator&=(K&a,Sb);
عملية الجمع المنطقي OR الثنائيa |= bR&K::operator|=(Sb);R&operator|=(K&a,Sb);
عملية XOR الثنائيةa ^= bR&K::operator^=(Sb);R&operator^=(K&a,Sb);
مجموعة عمليات الإزاحة الثنائية إلى اليسارa <<= bR&K::operator<<=(Sb);R&operator<<=(K&a,Sb);
عملية الإزاحة الثنائية لليمين [ g ]a >>= bR&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_castconst_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||أو المنطقيمن اليسار إلى اليمين
16co_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 ))

وهو تعبير صحيح. [ 11 ] [ 12 ]

لاستخدام عامل الفاصلة في تعبير وسيط استدعاء دالة، أو إسناد متغير، أو قائمة مفصولة بفواصل، يلزم استخدام الأقواس. [ 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) وبالتالي لا تنتمي بشكل صحيح إلى عمليات "البت".

ملحوظات

  1. يدعم عامل باقي القسمة معاملات الأعداد الصحيحة فقط؛ أما بالنسبة للأعداد العشرية، فيمكن استخدامدالة مثل هذهfmod
  2. 1 2 3 4 هذاintمُعامل وهمي للتمييز بين البادئة واللاحقة.
  3. حول مقارنة ثلاثية الاتجاهات حول C++20
  4. أنواع الإرجاع الممكنة:std::weak_ordering،std::strong_orderingوالتيstd::partial_orderingيمكن تحويلها جميعًا إليها.
  5. 1 2 في سياق iostreams في C++، غالبًا ما يشير الكتّاب إلى<<و>>على أنهما عاملي "put-to" أو "stream insertion" و "get-from" أو "stream extracting" على التوالي.
  6. وفقًا لمعيار C99، فإن الإزاحة إلى اليمين لعدد سالب تعتمد على التنفيذ.تستخدم معظم التطبيقات، مثل GCC، [ 3 ] إزاحة حسابية (أي تمديد الإشارة)، ولكنمن الممكن أيضًا استخدام إزاحة منطقية .
  7. وفقًا لمعيار C99، فإن الإزاحة إلى اليمين لعدد سالب تعتمد على التنفيذ.تستخدم معظم التطبيقات، مثل GCC، [ 3 ] إزاحة حسابية (أي تمديد الإشارة)، ولكنمن الممكن أيضًا استخدام إزاحة منطقية .
  8. 1 2 3 منذ C++23
  9. يمكن الحصول علىالعنوان الفعلي للكائن ذي التحميل الزائدoperator &std::addressof
  10. يجب أن يكون نوع الإرجاعنوعًايمكن تطبيق العملية عليه، مثل نوع المؤشر. إذاكان من النوعالذيالدوال الزائدة،فسيتم توسيعه إلى.operator->()->xCCoperator->()x->yx.operator->()->y
  11. مايرز، سكوت (أكتوبر 1999)، "تنفيذ عامل التشغيل -> * للمؤشرات الذكية" (ملف PDF) ، مجلة دكتور دوبز ، أريستيا.
  12. على الرغم من::وجود علامة ترقيم في لغة C اعتبارًا من الإصدار C23، إلا أنها لا تُستخدم كعامل تحديد نطاق.
  13. حول القيم الحرفية المعرفة من قبل المستخدم في C++11
  14. 1 2 3 4 5 6 7 8 منذ C++11
  15. لا تُستخدم الأقواس عند حساب حجم قيمة، وإنما فقط عند حساب حجم نوع بيانات. ومع ذلك، تُستخدم عادةً في جميع الأحوال.
  16. تُعرّف لغة C++alignofالمعامل، بينما تُعرّف لغة C المعامل_Alignof(وتُعرّف لغة C23 كلا المعاملين). للمعاملين نفس الدلالة.
  17. منذ C23؛ غير موجود في لغة C++ القياسية
  18. يتصرف مثل const_cast/static_cast/reinterpret_cast. في الحالتين الأخيرتين،autoيتم استبدال المحدد بنوع المتغير المُخترع x المُعلن عنه باستخدامauto x(a);(والذي لا يُفسر أبدًا على أنه تعريف دالة) أوauto x{a};، على التوالي.
  19. بالنسبة للتحويلات التي يحددها المستخدم، فإن نوع الإرجاع يتطابق ضمنيًا وبالضرورة مع اسم المعامل ما لم يتم استنتاج النوع (على سبيل المثال،إلخ).operatorauto()operatordecltype(auto)()
  20. يمكن أيضًا استنتاج اسم النوع (على سبيل المثالnew auto) إذا تم توفير مُهيئ.
  21. يمكن أيضًا استنتاج حجم المصفوفة إذا تم توفير مُهيئ.
  22. منذ C++26

انظر أيضاً

مراجع

  1. "تحميل زائد على المشغلين § مقارنة المشغلين" . cppreference.com .
  2. "Standard C++" .
  3. 1 2 "تنفيذ الأعداد الصحيحة"، GCC 4.3.3 ، GNU.
  4. "مواصفات ISO/IEC 9899:1999، TC3" (PDF) . ص 64، § 6.4.6 علامات الترقيم ، الفقرة 3.
  5. "تحويل مُعرَّف من قِبل المستخدم" . تم الاطلاع عليه بتاريخ 5 أبريل 2020 .
  6. التحويل الصريح للأنواع في لغة C++
  7. ISO/IEC 14882:1998(E) لغة البرمجة C++ . open-std.org – لجنة معايير C++. 1 سبتمبر 1998. الصفحات 40-41 . 
  8. ISO/IEC 9899:201x لغات البرمجة - C. open-std.org – لجنة معايير لغة C. 19 ديسمبر 2011. ص 465. 
  9. معيار ISO C 1999، القسم 6.5.6، الملاحظة 71 (التقرير الفني). ISO. 1999.
  10. "المعاملات المضمنة في لغة C++، والأسبقية، والترابط" . docs.microsoft.com . تم الاطلاع عليه بتاريخ 11 مايو 2020 .
  11. "أسبقية عوامل التشغيل في لغة C - cppreference.com" . en.cppreference.com . تم الاطلاع عليه بتاريخ 10 أبريل 2020 .
  12. "هل يتمتع عامل الشرط الثلاثي في ​​لغتي C/C++ بنفس أسبقية عوامل الإسناد؟" . Stack Overflow . تم الاطلاع عليه بتاريخ 22 سبتمبر 2019 .
  13. "عوامل تشغيل أخرى - cppreference.com" . en.cppreference.com . تم الاطلاع عليه بتاريخ 10 أبريل 2020 .
  14. "سي++ - كيف يعمل عامل الفاصلة؟" . موقع ستاك أوفرفلو . تم الاطلاع عليه في 1 أبريل 2020 .
  15. تاريخ C § حديثي الولادة C ، مختبرات بيل.
  16. "Re^10: شرط ما لم يتحقق الشرط التالي" . www.perlmonks.org . تم الاطلاع عليه بتاريخ 23 مارس 2018 .