0Pricing
C++ Academy · درس

‏auto وdecltype واستنتاج النوع

دع المترجم يستنتج الأنواع باستخدام auto وdecltype لكتابة شيفرة أوضح.

‏auto وdecltype واستنتاج النوع درس مجاني في C++ Academy على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في C++ Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة C++ Academy 4 دروس في المجموع.

استنتاج الأنواع في C++ الحديثة

منذ C++11، يستطيع المصرّف استنتاج الأنواع في مواضع عديدة. يجعل ذلك الشيفرة أقصر وأقل عرضة للأخطاء، عند استخدامه بحكمة.

الكلمة المفتاحية auto

تستنتج auto النوع من المهيّئ أثناء الترجمة. ومع ذلك، يظل للمتغير نوع ثابت معروف ساكنًا.

auto i = 42;          // int
auto d = 3.14;        // double
auto s = "hello";     // const char*
auto v = std::vector<int>{1,2,3};   // std::vector<int>

auto وconst

تُسقط auto افتراضيًا const والمراجع على المستوى الأعلى. أضيفوهما صراحةً عندما تريدون الاحتفاظ بهما.

const int n = 10;
auto a = n;            // int (const dropped)
const auto& b = n;     // const int&

auto مع المكرّرات

تكون أسماء أنواع المكرّرات طويلة، وهنا تتألق auto.

std::map<std::string, int> ages = {{"Ada", 30}};
auto it = ages.find("Ada");
// vs std::map<std::string,int>::iterator it = ...

for المعتمدة على النطاق وauto

استخدموا auto& للتكرار دون نسخ.

for (const auto& [name, age] : ages) {
    std::cout << name << ": " << age << "\n";
}

أنواع الإرجاع اللاحقة

يمكن للدوال استخدام auto كعنصر نائب لنوع الإرجاع، مع سهم لاحق يحدّد النوع، وهذا مفيد في القوالب.

auto add(int a, int b) -> int {
    return a + b;
}

استنتاج نوع الإرجاع في C++14

تسمح C++14 باستخدام أنواع إرجاع مكتوبة بصيغة auto فقط، إذ يستنتج المصرّف النوع من عبارة الإرجاع.

auto multiply(double x, double y) {
    return x * y;       // deduced as double
}

decltype: الحصول على نوع تعبير

تعطي decltype(expr) نوع expr أثناء الترجمة. وبخلاف auto، تحافظ على المراجع وconst.

int x = 0;
int& r = x;
decltype(r) ref = x;  // int&
decltype(x) val = 0;  // int

decltype(auto)

يجمع بين الاستنتاج وقواعد decltype، ويحافظ على نوع التعبير الدقيق، بما في ذلك فئة القيمة.

auto         a = some_func();   // copy
decltype(auto) b = some_func();  // exact type, including references

متى تتجنب auto

تجنبوا auto عندما لا يكون النوع المستنتَج واضحًا، مثل القيم الحرفية العددية الكبيرة أو العمليات الحسابية المختلطة أو الأحجام الخاصة بالمنصة. استخدموا الأنواع الصريحة لتحسين قابلية القراءة.

أسلوب استخدام auto دائمًا تقريبًا

توصي بعض أدلة الأسلوب باستخدام auto لجميع المتغيرات لتجنب التحويلات الصامتة، بينما تفضّل أدلة أخرى الأنواع الصريحة. اختاروا أسلوبًا وطبّقوه باستمرار.

تحقق سريع

ما الفرق بين auto وdecltype(auto) عند إرجاع مرجع؟

مراجعة

يستنتج auto الأنواع من المهيئات؛ ويحدد decltype نوع التعبير؛ بينما يستنتج decltype(auto) النوع مع الحفاظ على المراجع. استخدموها لتقليل الضوضاء، مع الحفاظ على قابلية القراءة.

الأسئلة الشائعة

هل درس «‏auto وdecltype واستنتاج النوع» مجاني؟

نعم — نص درس «‏auto وdecltype واستنتاج النوع» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة C++ Academy، انتقل إلى CoddyKit PRO. تتضمن دورة C++ Academy 4 دروس في المجموع.

ماذا ستتعلم في «‏auto وdecltype واستنتاج النوع»؟

دع المترجم يستنتج الأنواع باستخدام auto وdecltype لكتابة شيفرة أوضح. تتمرن على C++ Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ C++ Academy؟

لا تُشترط خبرة سابقة. C++ Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.

كم من الوقت يستغرق درس «‏auto وdecltype واستنتاج النوع»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس C++ Academy هذا؟

نعم. كل درس في C++ Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. ‏auto وdecltype واستنتاج النوع
  2. ‏range-based for وnullptr وenum class
  3. تعبيرات Lambda: الالتقاط والقابلية للتعديل والعُمومية
  4. الربط المنظّم وتهيئة if في C++17
← العودة إلى C++ Academy