c++ - আমি একটি ধ্রুবক ব্যবহার করে একটি অ্যারের দৈর্ঘ্য সংজ্ঞায়িত করতে পারি, তবে কেন এই কাজ হয় না?




(4)

খ এবং গ এর মধ্যে পার্থক্য কি?

গ এর একটি সংকলন সময় ধ্রুবক আরম্ভকারী রয়েছে, যখন বি হয় না। সংকলন সময় ধ্রুবক ইনিশিয়ালাইজার সহ একটি কনস্ট কনটাক্ট নিজেই একটি সংকলন সময় ধ্রুবক মান।

যেহেতু আমি একটি ধ্রুবক ব্যবহার করে একটি অ্যারের লেন্ট সংজ্ঞায়িত করতে পারি, সুতরাং কেন এই কাজ হয় না?

শুধু কোনও ধ্রুবকই করবে না। কনস্ট কোয়ালিফায়ার বলতে রানটাইম স্থিরতা বোঝায় (অর্থ মান রানটাইমে নির্ধারিত হতে পারে তবে বস্তুর আজীবন পরিবর্তন হবে না)। কেবল সংকলনের সময় ধ্রুবক মানগুলি অ্যারের আকার হিসাবে ব্যবহৃত হতে পারে।

    int a = 5;
    const int b = a, c = 4;

    int e[a];
    int d[b];
    int f[c];

f[c] এর সংজ্ঞাটি বৈধ।
চলক b এছাড়াও একটি ধ্রুবক int , তবে সংকলকটি আমাকে ত্রুটিটি প্রদান করে "এক্সপ্রেশনটির অবশ্যই একটি ধ্রুবক মান থাকতে হবে" লাইন int d[b]b এবং c এর মধ্যে পার্থক্য কি?


"কনস্ট" কেবলমাত্র এটির অর্থ হ'ল চলক চলমান সময়ে পরিবর্তিত হবে না এবং এর অর্থ এই নয় যে সংকলনকালে এর মানটি হ্রাস করা যেতে পারে।

আমার ধারণা আপনি যা খুঁজছেন তা হ'ল "কনটেক্সট্রপ"। হতে পারে আপনি এটি এর মতো করে চেষ্টা করে দেখতে পারেন:

constexpr int b = 4; // can't be assigned from a!
int d[b];

পরিবর্তে "কনস্টেক্সপ্র" এর অর্থ একটি "রিয়েল কনস্ট" এবং "কনস্ট" এর অর্থ কেবল "অ-পরিবর্তনশীল ভের", কারণ কিছু historicalতিহাসিক কারণ। এটি অবশ্যই মনে রাখতে হবে যে @ বাথশেবা বলেছিলেন যে সি ++ তে একটি নেটিভ অ্যারে সর্বদা স্থির হয়।


আপনি একটি ধ্রুবককে মান নির্ধারণ করতে একটি অ-ধ্রুবক ভেরিয়েবল ব্যবহার করছেন। সুতরাং, সেই ভেরিয়েবলের মান সংকলন সময় নির্ধারণ করা যায় না । আমি জানি আপনি কোনও পরিবর্তন করছেন না, তবে সংকলকটি এরকম চিন্তা করে না।


সংকলক ডায়গনিস্টিক সত্যই সংকলন সময় মূল্যায়নযোগ্য ধ্রুবক অভিব্যক্তি হওয়া উচিত।

যেহেতু const নির্ধারিত মূল বস্তুটি কনস্ট নয়, b একটি সংকলন সময় মূল্যায়নযোগ্য ধ্রুবক প্রকাশ নয়, সুতরাং সংকলন ব্যর্থ হবে কারণ পরিবর্তনশীল দৈর্ঘ্যের অ্যারেগুলি স্ট্যান্ডার্ড সি ++ তে সমর্থিত নয়।





c++