تحويل الأنواع
remove_const وdecay وغيرهما
تحويل الأنواع درس مجاني في C++ Academy على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في C++ Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة C++ Academy 4 دروس في المجموع.
تحويلات الأنواع
إلى جانب الاستعلام، يستطيع <type_traits> إنتاج أنواع جديدة من الأنواع الحالية. تكشف هذه السمات نوعًا عضوًا باسم ::type، مع توفير اختصار _t في C++14 وما بعده.
remove_const
تعطي std::remove_const_t<const int> النوع int. وهذا مفيد عندما تحتاج إلى نسخة قابلة للتعديل من نوع ما.
#include <iostream>
#include <type_traits>
int main() {
using T = std::remove_const_t<const int>;
std::cout << std::is_same_v<T, int> << "\n";
return 0;
}remove_reference
تعطي std::remove_reference_t<int&> النوع int. وهذا أساسي في التمرير المثالي وكتابة الشيفرة العامة.
#include <iostream>
#include <type_traits>
int main() {
using T = std::remove_reference_t<int&>;
std::cout << std::is_same_v<T, int> << "\n";
return 0;
}add_pointer وadd_const
تضيف التحويلات مؤهلات أيضًا.
add_const_t<int>=const intadd_pointer_t<int>=int*
#include <iostream>
#include <type_traits>
int main() {
using P = std::add_pointer_t<int>;
std::cout << std::is_same_v<P, int*> << "\n";
return 0;
}std::decay
يحاكي std::decay_t<T> التحويلات التي تحدث عند التمرير بالقيمة: فهو يزيل المراجع ومؤهلات cv، ويحوّل المصفوفات والدوال إلى مؤشرات.
#include <iostream>
#include <type_traits>
int main() {
using T = std::decay_t<const int&>;
std::cout << std::is_same_v<T, int> << "\n";
return 0;
}تحلل المصفوفات
يحوّل decay نوع المصفوفة إلى مؤشر، تمامًا كما يحدث عند تمرير مصفوفة إلى دالة.
#include <iostream>
#include <type_traits>
int main() {
using T = std::decay_t<int[5]>;
std::cout << std::is_same_v<T, int*> << "\n";
return 0;
}remove_cv
يزيل std::remove_cv_t<const volatile int> كلًا من const وvolatile، لينتج النوع int العادي.
#include <iostream>
#include <type_traits>
int main() {
using T = std::remove_cv_t<const volatile int>;
std::cout << std::is_same_v<T, int> << "\n";
return 0;
}common_type
يعطي std::common_type_t<A,B> النوع الذي يمكن تحويل كليهما إليه، مثل ناتج a + b.
#include <iostream>
#include <type_traits>
int main() {
using T = std::common_type_t<int, double>;
std::cout << std::is_same_v<T, double> << "\n";
return 0;
}underlying_type
بالنسبة إلى التعدادات، يكشف std::underlying_type_t<E> نوع العدد الصحيح الذي يستند إليه التعداد.
#include <iostream>
#include <type_traits>
enum class Color : unsigned char { Red, Green };
int main() {
using U = std::underlying_type_t<Color>;
std::cout << std::is_same_v<U, unsigned char> << "\n";
return 0;
}تسلسل التحويلات
يمكن تركيب التحويلات معًا. لتطبيع نوع مُمرَّر، غالبًا ما تدمج بينها، مثل remove_cv_t<remove_reference_t<T>>، وهو ما يبدأ به decay أساسًا.
أهمية التحويلات
غالبًا ما تتلقى الدوال العامة const T& أو T&&، لكنها تحتاج إلى النوع المجرّد لتصريح المتغيرات المحلية أو قيم الإرجاع. تمنحك سمات التحويل هذا النوع النظيف.
اختبار سريع
تذكّر ما يفعله decay.
مراجعة
تعلّمت تحويلات الأنواع.
- تكشف السمات
::typeمع توفير اختصار_t remove_constوremove_referenceوremove_cvadd_pointerوadd_constوdecay- يوفّر
common_typeوunderlying_typeنتائج مشتقة
الأسئلة الشائعة
هل درس «تحويل الأنواع» مجاني؟
نعم — نص درس «تحويل الأنواع» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة C++ Academy، انتقل إلى CoddyKit PRO. تتضمن دورة C++ Academy 4 دروس في المجموع.
ماذا ستتعلم في «تحويل الأنواع»؟
remove_const وdecay وغيرهما تتمرن على C++ Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ C++ Academy؟
لا تُشترط خبرة سابقة. C++ Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.
كم من الوقت يستغرق درس «تحويل الأنواع»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس C++ Academy هذا؟
نعم. كل درس في C++ Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.