هل لا يدعم IdeOne و Codepad حقًا C ++ 03؟
-
29-09-2019 - |
سؤال
سؤالي مرتبط بـ براسون'س سؤال حول أنواع غير مرنة وتهيئة القيمة.
جربت الكود التالي على المجمعين عبر الإنترنت مثل IdeOne و CodePad لكن التنفيذيين أعطوا خطأ في وقت التشغيل في كلا الموقعين.
#include <iostream>
#include <cassert>
struct Struct {
std::string String;
int Int;
bool k;
};
struct InStruct:Struct
{
InStruct():Struct(){}
};
int main()
{
InStruct i;
assert ( i.Int == 0);
std::cout << "Hello";
}
إخراج IDEONE هنا
إخراج codepad هنا
هل هذا يعني أن أيا منهما لا يدعم ميزة تهيئة القيمة C ++ 03؟
المحلول
هل هذا يعني أن أيا منهما لا يدعم ميزة تهيئة القيمة C ++ 03؟
نعم.
قبل الإصدار 4.4 ، لم تدعم GCC تهيئة القيمة بالكامل (رأس توافق GCC Boost يشرح هذا ولديه روابط لتقارير عيب GCC ذات الصلة ؛ انظر السطر 77).
إذا احتاجت التعليمات البرمجية الخاصة بك إلى أن تكون محمولة ، فيجب أن تكون حذرًا جدًا للاعتماد على تهيئة القيمة ؛ لم تدعمها GCC بشكل كامل حتى وقت قريب ، ولا تدعمه Visual C ++ بالكامل حتى في أحدث إصدار لها ، Visual C ++ 2010.
نصائح أخرى
الإعلان
InStruct i;
لا تستدعي تهيئة القيمة
$ 8.5.3/10 - "يجب أن يكون الكائن الذي يكون التهيئة مجموعة فارغة من الأقواس ، أي ، () ، قيمة."
إذا كنت ترغب في تقدير القيمة ، فستحتاج إلى تعبير مثل
assert(InStruct().Int == 0);
محاولة هو - هي حاليا! - يدعم IDEONE GCC-4.5.1