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 |