auto
الاستنتاج التلقائي للنوع auto
auto تجعل المترجم يستنتج نوع المتغيّر من قيمته الابتدائية بدل ما تكتبه أنت يدويًا.
auto كلمة مفتاحية أضافها C++11: بدل ما تكتب int أو std::vector<std::string>::iterator بشكل صريح، تكتب auto ويستنتج المترجم النوع من طرف اليمين وقت الترجمة (compile time) — مو runtime، فما في أي بطء بالتنفيذ.
مفيدة جدًا مع الأنواع الطويلة (خصوصًا iterators وlambdas) لكنها تقلّل وضوح الكود لو استخدمتها بمكان النوع فيه غير واضح من السياق.
الصياغة
auto name = expression;
📄 مثال
auto x = 5; // int
auto price = 19.99; // double
auto name = std::string("Ali");
for (auto it = v.begin(); it != v.end(); ++it) {
// it هون نوعه طويل جدًا لو كتبناه يدويًا
}أهم النقاط
| العنصر | الوظيفة |
|---|---|
| auto x = ... | استنتاج نوع بسيط من القيمة الابتدائية |
| const auto& | مرجع ثابت — الأشيع مع الحاويات لتفادي نسخ غير ضروري |
| auto&& | مرجع عام (universal reference) يُستخدم غالبًا بالقوالب |
| decltype(auto) | نسخة أدق تحافظ على المرجعية والـ const بدقة أكبر |
💡 نصائح عملية
- استخدمها دائمًا مع iterators وlambdas — توفّر كتابة أنواع طويلة جدًا
- لو النوع غير واضح من اسم المتغيّر أو السياق، اكتب النوع صراحة بدل auto
⚠️ أخطاء شائعة
- auto لازم قيمة ابتدائية دائمًا — auto x; وحدها خطأ ترجمة
- الظن أن auto نوع ديناميكي متل JavaScript — النوع يُحدَّد مرة واحدة وقت الترجمة ولا يتغيّر بعدها
خصائص ذات صلة
🎓 تريد فهم الصورة الكاملة خطوة بخطوة؟ ابدأ من مسار CPP الكامل بالعربي.