سؤال

بالنظر إلى نموذج أولي للوظيفة ، وتعريف النوع:

int my_function(unsigned short x);
typedef unsigned short blatherskite;

هو الموقف التالي المحدد بواسطة Standard:

int main(int argc, char** argv) {
  int result;
  blatherskite b;

  b=3;
  result = my_function(b);
}

هل أحصل على إكراه من النوع بشكل متوقع عبر النموذج الأولي للوظيفة؟

هل كانت مفيدة؟

المحلول

إذا كان سؤالك يدور حول ما إذا كانت أنواع الوسيطة ومطابقة المعلمة ، فإن الإجابة هي نعم. typedef لا يقدم نوعًا جديدًا ، فهو يخلق فقط الاسم المستعار لنظام موجود. عامل b لديه النوع unsigned int, ، تماما مثل المعلمة ، على الرغم من b يُعلن باستخدام Typedef-Name blatherskite.

مثالك ليس جيدًا جدًا لإثبات ذلك. جميع الأنواع المتكاملة قابلة للتحويل لبعضها البعض في C ++ ، لذلك (تجاهل مشكلات النطاق) كان الرمز يحدد السلوك حتى لو blatherskite تم تعيين نوع مختلف (نوع جديد). لكنه لا. لذلك هذا صحيح أيضا تماما

void foo(unsigned int* p);
...
blatherskite *pb = 0;
foo(pb); // <- still valid

نصائح أخرى

لا يوجد أي إكراه نوع. typedef هو مجرد الاسم المستعار لنفس النوع ، لذلك أنت تمر unsigned short إلى وظيفة تأخذ unsigned short.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top