في مراجع دلفي ذكر ان const parameter يتصرف نفس value parameter ، بماذا يتشابها وبماذا يختلفان ولماذا ينصح استخدام const مع السلاسل الحرفية ؟
في حالة اذا كانت القيمة التي تم تمريرها إلى الاجراء قيمة عددية هل يتم نسخها إلى stack كما يحصل عند التمرير بالقيمة pass by value ؟
حتى تفهم الفكرة جيدا يجب ان تعرف طريقة التمرير ب ال var ..
عندما تمرر متغير ك var فانت في الحقيقة تمرره كمؤشر .. لذلك عند تغييره داخل اجراء خارجي .. ستتغير قيمته .
اما عند التمرير ك const فالكومبايلر سيقوم بعمل نسخة من المتغير في ال stack فقط اذا كان طول نوع المتغير اكبر من 4 بت او 8 بت للنظامين 32 بت و 64 بت على التوالي ..
هناك عامل اخر وهو calling convention : في حالة stdcall سيتم تجاهل طول النوع variable type ويتم دفع المتغير مباشرة في ال stack .
عند التعامل مع السلاسل النصية ينصح العديد من المبرمجين بتمريرها ك const وارجاع القيمة ك return تفاديا لمشاكل الوصول للذاكرة عند استخدام التمرير ك var ،فمؤشر المتغير يمكن ان يؤشر على مكان في الذاكرة قد تم تحريره مسبقا بتدخل من المبرمج او من الكومبايلر .
ان لم تكن على دراية بطريقة تنظيم الذاكرة .. فسيكون التمرير ك const خيار جيدا .
اما ان كان المبرمج على دراية بذلك .. فيستطيع التمرير بالاسلوب الذي يناسبه .
+ تمرير سلسلة نصية ك var من ال heap افضل و أأمن بكثير .
السلام عليكم يمكن
الرد يساعدك ان شاء الله
التمرير بالـ var ما هو الا تمرير مؤشر دلفي حريص على اخفاء تعاملك بالمؤشرات
أخ smp3 هل من الممكن ارفاق مثال بسيط يوضح ما شرحته
amer12 كتب :أخ smp3 هل من الممكن ارفاق مثال بسيط يوضح ما شرحته
أعتذر أخي .. لا يمكنني ان ارفق مثال حاليا ..
انا اتصفح المنتدى من الجوال ..
ممكن فيما بعد ..