انتهاك تسوية المنازعات بالاتصال الحاسوبي المباشر عندما يجد البحث عن الاسم إعلانا مختلفا

StackOverflow https://stackoverflow.com/questions/6014349

  •  14-11-2019
  •  | 
  •  

سؤال

لقد كنت أفكر في ما يلي.النظر في ملفين:

A.cpp:

template<class T> void g(T) {}

inline void f() { g(1); }

B.cpp:

template<class T> void g(T) {}
void g(int) {}

inline void f() { g(1); }

بدون void g(int) {} هذا البرنامج صالح بنسبة 100٪.مع void g(int) {}, g(1) يحل إلى إصدار القالب في A.cpp وإلى غير القالب في B.cpp.

هل ينتهك هذا البرنامج تسوية المنازعات بالاتصال الحاسوبي المباشر?لم؟

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

المحلول

نعم ، هو يعمل.في الاستثناء ل inline وظائف تم تحديد أنه لا يجب أن تتكون تعريفات الوظيفة المضمنة فقط من نفس تسلسل الرمز المميز تماما ولكن يجب أن تشير جميع المعرفات المقابلة في تعريف الوظيفة التي تسمي الكيانات خارج تعريف الوظيفة إلى نفس الكيان (مع بعض الاستثناءات الطفيفة ، مثل الإشارة إلى كائنات كونست ذات ارتباط داخلي مع نفس التعريف المسموح به).[انظر إسو / إيك 14882:2003 3.2 / 5]

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