কনস্ট্রাক্টর সূচনা-তালিকা মূল্যায়ন ক্রম


252

আমার কাছে এমন একজন কনস্ট্রাক্টর রয়েছে যা কিছু যুক্তি দেখায়। আমি ধরে নিয়েছিলাম যে সেগুলি তালিকাভুক্ত ক্রম অনুসারে নির্মিত হয়েছিল, তবে একটি ক্ষেত্রে দেখা যাচ্ছে যে তারা বিপরীতে নির্মাণ করা হচ্ছে যার ফলস্বরূপ একটি গর্ভপাত বন্ধ হয়ে গেছে। আমি যখন যুক্তিগুলি বিপরীত করি তখন প্রোগ্রামটি বাতিল হওয়া বন্ধ হয়ে যায়। এটি আমি ব্যবহার করছি সিনট্যাক্সের একটি উদাহরণ। বিষয়টি হ'ল, এ ক্ষেত্রে খ_ এর আগে এ_কে আরম্ভ করা দরকার। আপনি নির্মাণের আদেশ গ্যারান্টি দিতে পারেন?

যেমন

class A
{
  public:
    A(OtherClass o, string x, int y) :
      a_(o), b_(a_, x, y) { }

    OtherClass a_;
    AnotherClass b_;
};

6
আপনি বলছেন যে আপনি কনস্ট্রাক্টর আর্গুমেন্ট সম্পর্কে জিজ্ঞাসা করছেন, তবে কনস্ট্রাক্টারের কাছে পৌঁছানোর আগে সেগুলি মূল্যায়ন করা হয় এবং সেগুলি নির্ধারিত, সংকলক-নির্ধারিত ক্রমে মূল্যায়ন করা হয়। তবে আপনি সত্যিই সূচনা তালিকার ক্রম সম্পর্কে জিজ্ঞাসা করছেন, তাই আমি আপনার জন্য প্রশ্নের শিরোনাম পরিবর্তন করেছি।
রব কেনেডি

উত্তর:


278

এটি ক্লাসে সদস্য পরিবর্তনশীল ঘোষণার ক্রমের উপর নির্ভর করে। সুতরাং a_প্রথমটি b_হবে , তারপরে আপনার উদাহরণের মধ্যে দ্বিতীয়টি হবে।


22
প্রকৃতপক্ষে, ভাল সংকলকগণ সতর্ক করবে যদি আপনার ঘোষণায় বনাম কনস্ট্রাক্টর ইনিশিলাইজার তালিকার কোনও আলাদা অর্ডার থাকে। উদাহরণস্বরূপ, -Wreorderজিসিসিতে দেখুন।
গ্রেগ হিউগিল

236
যে কারণে তারা সদস্য ঘোষণার আদেশে এবং নির্মাণকারীর ক্রমে নয় এমনটি নির্মাণ করা হয় যে কারও একাধিক কনস্ট্রাক্টর থাকতে পারে তবে সেখানে কেবল একজনই ডেস্ট্রাক্টর রয়েছে। এবং ধ্বংসকারী নির্মাণের গবেষণামূলক ক্রমে সদস্যদের ধ্বংস করে।
এপ্রোগ্রামার

3
আমাদের মানে কি ... ঘোষণার বিপরীত ক্রম? "নির্মাণ" নয়, ডেস্ট্রাক্টর সম্ভবত এটি নির্মাণকারীর মধ্যে দেখতে পাবে না এটি কি জানতে পারে?
কনরাড বি

196

স্পষ্টতার জন্য মানটির উদ্ধৃতি দিতে:

12.6.2.5

সূচনা নিম্নলিখিত ক্রমে অগ্রসর হবে:

...

  • তারপরে, ননস্ট্যাটিক ডেটা সদস্যদের শ্রেণি সংজ্ঞায় ঘোষিত ক্রমে (আবার স্মৃতি-আরম্ভকারীদের আদেশ নির্বিশেষে) শুরু করা হবে।

...


18

এর স্ট্যান্ডার্ড রেফারেন্সটি এখন 12.6.2 বিভাগ 13.3 বলে মনে হচ্ছে:

(১৩.৩) - তারপরে, অ-স্থিতিশীল ডেটা সদস্যদের শ্রেণি সংজ্ঞায় ঘোষিত ক্রমে (আবার মেম-আরম্ভকারীদের ক্রম নির্বিশেষে) শুরু করা হয়।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.