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 |