انتهاك تسوية المنازعات بالاتصال الحاسوبي المباشر عندما يجد البحث عن الاسم إعلانا مختلفا
-
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]
لا تنتمي إلى StackOverflow