71 lines
3.8 KiB
Markdown
71 lines
3.8 KiB
Markdown
---
|
||
title: The Auto Feature
|
||
localeTitle: الميزة التلقائية
|
||
---
|
||
## الميزة التلقائية
|
||
|
||
`auto` هي ميزة C ++ 11 تتيح للمبرمج إمكانية استنتاج نوع البيانات في تعريف. هذا يمكن أن يوفر لك الكثير من الكتابة ، وخاصة مع أنواع معقدة.
|
||
|
||
بدون `auto` :
|
||
|
||
`double x = 10.425;
|
||
double y = x * x;
|
||
`
|
||
|
||
مع `auto` :
|
||
|
||
`double x = 10.425;
|
||
auto y = x * x;
|
||
`
|
||
|
||
في حين أنه قد يبدو تافهاً ، فإنه يصبح مفيداً بشكل لا يصدق عندما تبدأ أنواع البيانات في التعقيد. على سبيل المثال ، افترض أنك تريد تخزين [`vector`](https://guide.freecodecamp.org/cplusplus/vector) من الموظفين ، وأنك مهتم فقط باسمهم وعمرهم. إحدى الطرق لتخزين الاسم والعمر يمكن أن تكون `pair` `string` وأخرى `unsigned int` . يتم `std::vector<std::pair<std::string, unsigned int>> employees` كـ `std::vector<std::pair<std::string, unsigned int>> employees` . الآن لنفترض أنك تريد الوصول إلى آخر موظف تمت إضافته:
|
||
|
||
`std::vector<std::pair<std::string, unsigned int>> employees;
|
||
|
||
// without auto, you have to write:
|
||
std::pair<std::string, unsigned int>> last_employee = employees.back();
|
||
|
||
// with auto, you just have to write:
|
||
auto last_employee = employees.back();
|
||
`
|
||
|
||
بمجرد تحديد المحول البرمجي للنوع على الجانب الأيمن من `=` يستبدل `auto` بهذا النوع.
|
||
|
||
في الإصدارات الحديثة من C ++ (منذ C ++ 14)، `auto` يمكن أن تستخدم أيضا في تعريف الدالة كنوع العودة. سوف يقوم المترجم بعد ذلك باستنتاج نوع الإرجاع من بيان الإرجاع داخل الدالة. على سبيل المثال مع الموظفين:
|
||
|
||
`std::vector<std::pair<std::string, unsigned int>> employees;
|
||
auto get_last_employee() {
|
||
return employees.back(); // Compiler knows the return type from this line.
|
||
}
|
||
`
|
||
|
||
سيعرف المحول البرمجي من السطر مع العبارة الإرجاع أنه يجب أن يكون نوع الإرجاع من الدالة `std::vector<std::pair<std::string, unsigned int>>` .
|
||
|
||
على الرغم من [كونها](http://en.cppreference.com/w/cpp/language/auto) تقنية للغاية ، إلا أن [صفحة cppreference على السيارات](http://en.cppreference.com/w/cpp/language/auto) تصف الكثير من الاستخدامات `auto` وتفاصيل متى يمكن استخدامها أو لا يمكن استخدامها.
|
||
|
||
### `auto` قبل C ++ 11
|
||
|
||
في بعض الكتب المدرسية القديمة التي تحتوي على شفرة قديمة _جدًا_ ، يتم استخدام الكلمة الرئيسية `auto` بطريقة مختلفة تمامًا.
|
||
|
||
كانت هذه `auto` المحددة عبارة عن كلمة رئيسية مستعارة من C ، وربما كانت الكلمة الرئيسية الأقل استخدامًا على الإطلاق.
|
||
|
||
في C ++ ، تحتوي كل المتغيرات على _مدة تلقائية_ ، أي أنها محددة حتى تخرج من الوظيفة التي تم تعريفها بها.
|
||
|
||
فمثلا:
|
||
|
||
\`\` \`حزب الشعب الكمبودي
|
||
|
||
# تتضمن
|
||
|
||
انت مين() { كثافة العمليات أ = 1 ؛ // المنطقي ، كما تم تعريفه في نفس الوظيفة
|
||
|
||
` return 0;
|
||
`
|
||
|
||
} أ = 2 ؛ // لا معنى له ، حيث لا يتم تعريف هنا \`\` \`
|
||
|
||
هذا معطى في C ++ ، وحدد `auto` أن المتغير يجب أن يكون له _مدة تلقائية_ ، وبالتالي عدم الاستخدام.
|
||
|
||
## قراءة متعمقة :
|
||
|
||
* http://www.stroustrup.com/C++11FAQ.html#auto |