سؤال

سؤالي مرتبط بـ براسونسؤال حول أنواع غير مرنة وتهيئة القيمة.

جربت الكود التالي على المجمعين عبر الإنترنت مثل 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

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