هي دلفي المتغيرات تهيئة مع القيمة الافتراضية ؟

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

سؤال

أنا جديد في دلفي, و لقد تم تشغيل بعض الاختبارات لمعرفة ما هو كائن المتغيرات كومة المتغيرات تهيئة بشكل افتراضي:

TInstanceVariables = class
  fBoolean: boolean; // always starts off as false
  fInteger: integer; // always starts off as zero
  fObject: TObject; // always starts off as nil
end;

هذا هو السلوك اعتدت من اللغات الأخرى, ولكن أنا أتساءل عما إذا كان من الأسلم أن تعتمد عليه في دلفي?على سبيل المثال, أنا أتساءل عما إذا كان قد يعتمد على مترجم الإعداد ، أو ربما تعمل بشكل مختلف على أجهزة مختلفة.هل من الطبيعي أن تعتمد على الافتراضي تهيئة قيم الأشياء ، أو هل بوضوح تعيين جميع المتغيرات سبيل المثال في البناء ؟

أما بالنسبة المكدس (الداخلي-مستوى) المتغيرات بلدي التجارب تظهر أن unitialized القيم المنطقية صحيحة ، unitialized الصحيحه هي 2129993264 ، uninialized الكائنات هي فقط صالحة المؤشرات (أيلا النيل).أعتقد أن القاعدة هي مجموعة الإجراءات على مستوى المتغيرات قبل الدخول بها ؟

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

المحلول

نعم هذا هو توثيق السلوك:

  • حقول كائن دائما تهيئة 0, 0.0, ", False, النيل أو ما ينطبق.

  • المتغيرات العالمية هي دائما تهيئة 0 الخ كذلك ؛

  • المرجعية المحلية-تحسب* المتغيرات دائما تهيئة النيل أو" ؛

  • محلية غير إشارة عدها* المتغيرات غير مهيأ لذلك يجب عليك تعيين قيمة قبل أن تتمكن من استخدامها.

أتذكر ذلك باري كيلي في مكان ما كتب تعريف "مرجع عدها", ولكن لا يمكن العثور على أي أكثر من ذلك ، هذا ما ينبغي أن نفعله في هذه الأثناء:

إشارة عدها == التي هي مرجع تحسب نفسها ، أو بشكل مباشر أو غير مباشر تحتوي على الحقول (السجلات) أو العناصر (على المصفوفات) التي هي إشارة عدها مثل: string, variant, interface أو مجموعة ديناميكية أو ثابت صفيف التي تحتوي على مثل هذه الأنواع.

ملاحظات:

  • record في حد ذاته لا يكفي أن تصبح مرجعية-تحسب
  • لم أحاول هذا مع الأدوية بعد

نصائح أخرى

المتغيرات العالمية التي لا تملك صريح مهيئ تخصص في BSS القسم في الملف القابل للتنفيذ.فإنها في الواقع لا تأخذ أي مساحة في EXE ؛ على BSS القسم هو قسم خاص أن يخصص نظام التشغيل و مسح الصفر.على أنظمة تشغيل أخرى ، هناك آليات مماثلة.

يمكنك أن تعتمد على المتغيرات العالمية يجري صفر-تهيئة.

فئة الحقول الافتراضية صفر.هذا هو موثق لذلك يمكنك الاعتماد على ذلك.المحلية كومة varaiables غير محددة ما لم السلسلة أو واجهة هذه يتم تعيين إلى الصفر.

فقط كملاحظة جانبية (كما كنت جديدا على دلفي):المتغيرات العالمية يمكن تهيئة مباشرة عندما يعلن لهم:

var myGlobal:integer=99;

وهنا أقتبس من راي Lischners دلفي باختصار الفصل 2

"عندما دلفي أولا بإنشاء كائن كافة الحقول تبدأ فارغة ، وهذا هو ، مؤشرات تهيئة النيل, سلاسل صفائف ديناميكية فارغة ، أرقام القيمة صفر, منطقية الحقول كاذبة و المتغيرات هي مجموعة غير المعينة.(انظر مثيل جديد و InitInstance في الفصل 5 للحصول على التفاصيل.)"

صحيح أن المحلية في نطاق المتغيرات تحتاج إلى أن تكون initialised...أريد علاج التعليق أعلاه أن "المتغيرات العالمية هي initialised" كما مشكوك فيها حتى قدم مع إشارة - لا أصدق ذلك.

تحرير...باري يقول كيلي يمكنك أن تعتمد عليها كونها صفر-initialised و هو على دلفي مترجم الفريق وأعتقد أن تقف :) شكرا باري.

المتغيرات العالمية و مثيل كائن البيانات (الحقول) دائما تهيئة إلى الصفر.المتغيرات المحلية في إجراءات وأساليب لم يتم تهيئة في Win32 دلفي;مضمونها هو غير معروف حتى يمكنك تعيين لهم قيمة في الرمز.

حتى إذا كانت اللغة لا تقدم الافتراضي التهيئة ، أنا لا أعتقد أنك يجب أن تعتمد عليها.تهيئة إلى قيمة يجعلها أكثر من ذلك بكثير واضحة إلى المطورين الآخرين الذين قد لا يعرفون عن التهيئة الافتراضية في اللغة ويمنع المشاكل عبر المجمعين.

من دلفي 2007 ملف المساعدة:

ms-help://borland.bds5/devcommon/variables_xml.html

"إذا كنت لا صراحة تهيئة متغير عالمي مترجم تهيئة إلى 0."

أنا واحد وجع القليل مع الإجابات المعطاة.دلفي الأصفار من مساحة الذاكرة من globals حديثا-الكائنات التي تم إنشاؤها.في حين أن هذا عادة يعني هم تهيئة هناك حالة واحدة من حيث لا يتوقعون:الأنواع السردية مع القيم المحددة.ما إذا كان من الصفر لا قيمة قانونية??

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