الاستعلام عن الأنواع
افحص الأنواع وقت الترجمة
الاستعلام عن الأنواع درس مجاني في C++ Academy على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في C++ Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة C++ Academy 4 دروس في المجموع.
ما هي سمات الأنواع؟
يتيح لك الترويس <type_traits> طرح أسئلة حول الأنواع وقت الترجمة. كل سمة هي قالب يكشف ثابتًا باسم ::value أو نوعًا عضوًا.
is_integral
تكون قيمة std::is_integral<T>::value صحيحة للأنواع الصحيحة مثل int وchar، وخاطئة فيما عدا ذلك.
#include <iostream>
#include <type_traits>
int main() {
std::cout << std::is_integral<int>::value << "\n";
std::cout << std::is_integral<double>::value << "\n";
return 0;
}اختصار _v
أضاف C++17 قوالب المتغيرات _v، بحيث يمكنك كتابة std::is_integral_v<T> بدلًا من ::value.
#include <iostream>
#include <type_traits>
int main() {
std::cout << std::is_integral_v<long> << "\n";
std::cout << std::is_floating_point_v<float> << "\n";
return 0;
}سمات التصنيف
تصنّف العديد من السمات الأنواع.
is_pointeris_referenceis_arrayis_classis_enum
#include <iostream>
#include <type_traits>
struct S {};
int main() {
std::cout << std::is_pointer_v<int*> << "\n";
std::cout << std::is_class_v<S> << "\n";
std::cout << std::is_reference_v<int&> << "\n";
return 0;
}سمات العلاقات
تقارن بعض السمات بين نوعين.
is_same<A,B>is_base_of<Base,Derived>is_convertible<From,To>
#include <iostream>
#include <type_traits>
struct Base {};
struct Derived : Base {};
int main() {
std::cout << std::is_same_v<int, int> << "\n";
std::cout << std::is_base_of_v<Base, Derived> << "\n";
return 0;
}سمات الخصائص
تعرض سمات الخصائص المؤهلات والإمكانات.
is_constis_signedis_trivially_copyableis_default_constructible
#include <iostream>
#include <type_traits>
int main() {
std::cout << std::is_const_v<const int> << "\n";
std::cout << std::is_signed_v<unsigned> << "\n";
return 0;
}استخدام السمات في static_assert
تتوافق السمات بصورة مثالية مع static_assert لفرض المتطلبات وقت الترجمة.
#include <type_traits>
#include <iostream>
template <typename T>
T add(T a, T b) {
static_assert(std::is_arithmetic_v<T>, "T must be a number");
return a + b;
}
int main() {
std::cout << add(2, 3) << "\n";
return 0;
}كيف تعمل السمات
السمة ليست سوى قالب struct. يرث القالب العام من false_type، بينما يرث التخصيص الخاص بالنوع المطابق من true_type. يختار المترجم أفضل تطابق.
integral_constant
ترث جميع السمات المنطقية من std::integral_constant. إن true_type وfalse_type مجرد اسمان مستعاران له مع جعل value تساوي true أو false.
#include <iostream>
#include <type_traits>
int main() {
std::cout << std::true_type::value << "\n";
std::cout << std::false_type::value << "\n";
return 0;
}الاستعلام داخل القوالب
تتيح السمات للقوالب تحديد فرع التنفيذ بناءً على نوع القيمة التي تتلقاها، مما يمكّن الشيفرة العامة من التكيّف بطريقة مختلفة مع أنواع int أو float أو المؤشرات أو الفئات.
وقت الترجمة فقط
لا تكلّف استعلامات السمات شيئًا وقت التشغيل؛ فهي تُقيَّم أثناء الترجمة، وتُدمج النتيجة في الشيفرة المُولَّدة.
اختبار سريع
تذكّر الصيغة الميسّرة في C++17.
مراجعة
تعلّمت الاستعلام عن الأنواع.
- يجيب
<type_traits>عن الأسئلة وقت الترجمة - تعيد
::valueأو الاختصار_vقيمة منطقية - سمات التصنيف والعلاقات والخصائص
- استخدمها مع
static_assertلفرض القيود
الأسئلة الشائعة
هل درس «الاستعلام عن الأنواع» مجاني؟
نعم — نص درس «الاستعلام عن الأنواع» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة C++ Academy، انتقل إلى CoddyKit PRO. تتضمن دورة C++ Academy 4 دروس في المجموع.
ماذا ستتعلم في «الاستعلام عن الأنواع»؟
افحص الأنواع وقت الترجمة تتمرن على C++ Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ C++ Academy؟
لا تُشترط خبرة سابقة. C++ Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.
كم من الوقت يستغرق درس «الاستعلام عن الأنواع»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس C++ Academy هذا؟
نعم. كل درس في C++ Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- الاستعلام عن الأنواع
- تحويل الأنواع
- المنطق الشرطي
- كتابة سمات أنواع مخصّصة