আমি একটি ধ্রুবক ব্যবহার করে একটি অ্যারের দৈর্ঘ্য সংজ্ঞায়িত করতে পারি, সুতরাং কেন int ডি [বি] কাজ করে না?


11
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?

উত্তর:


16

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

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

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

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


6

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


4

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

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


1

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

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

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

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


আপনি কোন "অন্যান্য ভাষা" সম্পর্কে কথা বলছেন?
ব্রায়ান

1
@ ব্রায়ান দুঃখিত, এটি প্রাসঙ্গিক নয়। আমি আমার উত্তর পরিবর্তন করেছি।
লিওন

"সত্যিকারের স্কটসম্যান নেই ..." - আমাকে আপনার "কনটেক্সপ্রিফ" এর সাথে একমত হওয়ার পরিবর্তে এর অর্থ একটি "রিয়েল কনস্ট" এবং "কনস্ট" এর অর্থ কেবল "পরিবর্তনবিহীন ভার" বিবৃতি। "কনস্ট" এর অর্থ "কনস্ট", "কনস্টেক্সপ্র" এর অর্থ "কনস্টেক্সপ্র" - সি ++ ভাষার প্রসঙ্গে তাদের দুটি স্বতন্ত্র অর্থ এবং জড়িত রয়েছে। " কনস্ট" এর অর্থ "অবজেক্টটি সংশোধন করা যায় না" , "কনটেক্সপপ্র" এর অর্থ "সংকলনের সময় ফাংশনটির মান বা ভেরিয়েবলের মূল্যায়ন করা সম্ভব"
CharonX

দুঃখিত, সম্ভবত আমি এটি ভুলভাবে প্রকাশ করেছি। ইংরেজি আমার মাতৃভাষা নয়.
লিওন

1

"ধ্রুবক" শব্দটি সত্যই অস্পষ্ট এবং কীওয়ার্ডটি constবিভ্রান্তিকর।

constএর অর্থ: "আরম্ভের পরে এই বস্তুর মান পরিবর্তন করা যাবে না"। এটা আছে না মানে "কম্পাইল-টাইম ধ্রুবক"। এর প্রাথমিক মানটি রানটাইম উত্স থেকে এখনও আসতে পারে (এবং সাধারণত হয়)।

অ্যারে বাউন্ডের জন্য আপনার একটি সংকলন-সময় ধ্রুবক প্রয়োজন।

মাঝে মাঝে একটি বস্তু নামে করা সম্ভব fooযদি তা না হয়, যে কম্পাইল-টাইম ধ্রুবক const এবং এটি একটি আক্ষরিক বা মত একটি ধ্রুবক অভিব্যক্তি থেকে ইনিশিয়ালাইজ করা হয়েছিল, constexprজিনিস। এটি ক্ষেত্রে c; এটা ক্ষেত্রে হয় না b

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