`স্ট্যাটিক কনস্ট` বনাম` কনস্টের সি ++ শব্দার্থক শব্দ `


149

বিশেষত সি ++ এ, উদাহরণস্বরূপ এর মধ্যে অর্থগত পার্থক্যগুলি কী:

static const int x = 0 ;

এবং

const int x = 0 ;

staticসংযোগ এবং স্টোরেজ শ্রেণীর নির্দিষ্টকরণকারক (যেমন কোনও ফাংশনের অভ্যন্তরে এবং বাইরে) উভয়ের জন্য ।


7
staticসম্ভবত সি ++ এর মধ্যে সর্বাধিক-ওভারলোড হওয়া কীওয়ার্ড। আপনার কোডের অর্থটি স্থানের ক্ষেত্রের, শ্রেণি স্কোপে বা ফাংশন স্কোপে থাকুক কিনা তার উপর নির্ভর করে ব্যাপকভাবে পরিবর্তিত হয়। আপনি এটি পরিষ্কার করতে চাইতে পারেন।
এসবিআই

1
@ এসবিআই: আমি ভেবেছিলাম ইতিমধ্যে করেছি did ফাংশন স্কোপ (যেখানে এটি স্টোরেজ শ্রেণীর নির্দিষ্টকরণকারী) এবং ফাইল স্কোপ (যেখানে এটি কোনও লিঙ্কেজ নির্দিষ্টকরণকারক)। ক্লাসের সদস্য এবং নেমস্পেস স্কোপড ভেরিয়েবলগুলি বিশেষত এই প্রশ্নের বিষয়ে আমার কাছে উদ্বেগের বিষয় নয়, যদিও কেউ যদি মনে করেন যে এটির মধ্যে একটি আকর্ষণীয় পার্থক্য রয়েছে তবে তাও coverাকতে দ্বিধা বোধ করবেন না।
ক্লিফোর্ড

ক্লিফোর্ড: আমি দুঃখিত যে আমি এই শেষ শব্দটিকে উপেক্ষা করেছি। যাইহোক, এই আপনার পক্ষ থেকে একটি ভুল বোঝাবুঝি প্রকাশ: ইন সি ++, ফাইল সুযোগ হয় নামস্থান সুযোগ। যদি আপনি কোনও নাম স্থানের বাইরে কিছু ঘোষণা করেন তবে এটি কেবল বিশ্বব্যাপী নেমস্পেসের অন্তর্ভুক্ত হবে (এবং ::সামনে কোনও সনাক্তকারী না রেখে একটি উপসর্গের মাধ্যমে অ্যাক্সেসযোগ্য হবে )। আমি বিশ্বব্যাপী নেমস্পেস এবং এর মধ্যে থাকা কোনও নাম স্থানের মধ্যে কোনও অর্থবোধের পার্থক্য সম্পর্কে অবগত নই। অবশ্যই staticঅবজেক্ট সম্পর্কিত কোন নেই ।
এসবিআই

1
যোগসূত্রটি দৃশ্যমানতার চেয়ে আলাদা , এগুলি পরস্পরের পরিবর্তে ব্যবহার করে আপনি যাদের সাথে কথা বলছেন এবং সম্ভবত নিজেরাই বিভ্রান্ত করতে চলেছেন।
বেন ভয়েগট

1
@ বেন, @ এসবিআই: আমি স্থির লিঙ্কেজটি ফাইল স্কোপকে বোঝায় কেবল ফাইল স্কোপ এবং স্থিতিশীল লিঙ্কেজ একই ছিল তা বোঝানোর আমি ইচ্ছা করি নি । এই অর্থে স্কোপ (বা দৃশ্যমানতা) স্থির এবং বাহ্যিক সংযোগের একটি বৈশিষ্ট্য, কোনওটির প্রতিশব্দ নয়। আমি অনুভব করি যে মূল প্রশ্নটি স্পষ্ট এবং সুগঠিত রয়েছে, এবং আমরা কেবল এসবিআইর কিছুটা অবজ্ঞাপূর্ণ মন্তব্যের জবাবে দেওয়া মন্তব্যগুলি নিয়ে আলোচনা করছি। আমরা আমার বোঝার চেয়ে এখানে ইংরেজির অকথ্য শব্দার্থতত্ত্ব নিয়ে আলোচনা করছি, তাই আমি মনে করি আমরা থামতে পারি।
ক্লিফোর্ড

উত্তর:


128

ফাইল স্কোপে, সি ++ তে কোনও পার্থক্য নেই। constঅভ্যন্তরীণ লিঙ্কেজটি ডিফল্ট করে তোলে এবং সমস্ত বৈশ্বিক ভেরিয়েবলের স্থির জীবনকাল থাকে। তবে প্রথম বৈকল্পিকের সি তে একই আচরণ রয়েছে, এটি এটি ব্যবহারের জন্য ভাল কারণ হতে পারে।

একটি ফাংশনের মধ্যে, দ্বিতীয় সংস্করণটি পরামিতিগুলি থেকে গণনা করা যেতে পারে। সি বা সি ++ এ এটি অন্য কোনও ভাষার প্রয়োজন মতো একটি সংকলন-সময় ধ্রুবক হতে হবে না।

ক্লাসের মধ্যে, ফাংশনগুলির জন্য মূলত একই জিনিস। কর্টোর-ইনিশিয়ালাইজার-তালিকায় একটি উদাহরণ constমান গণনা করা যায় । একটি সূচনার আরম্ভের সময় নির্ধারণ করে এবং প্রোগ্রাম বাকি জন্য অপরিবর্তিত রয়ে হয়। (দ্রষ্টব্য: সদস্যদের কোডটি কিছুটা আলাদা দেখায় কারণ ঘোষণা এবং সূচনা পৃথক করা হয়েছে are)static conststatic

মনে রাখবেন, সি ++ এর constঅর্থ , কেবল পঠনযোগ্য , ধ্রুবক নয় । আপনার যদি কোনও পয়েন্টার-টু থাকে constতবে প্রোগ্রামটির অন্যান্য অংশগুলি আপনাকে সন্ধান না করার সময় মানটি পরিবর্তন করতে পারে। যদি ভেরিয়েবলটি সংজ্ঞায়িত constকরা হয় তবে আরম্ভের পরে কেউ এটিকে পরিবর্তন করতে পারে না তবে সূচনাটি এখনও ইচ্ছামত জটিল হতে পারে।


1
ফাইল স্কোপ বলে কিছু আছে? আমি সবেমাত্র $ 3.3 যাচাই করেছিলাম এবং আমার কাছে মনে হয় নিকটতমটি 'নেমস্পেস স্কোপ'। আমার বোধগম্যতা কি ঠিক? সি ++ 03 স্ট্যান্ডার্ডটি কেবলমাত্র পরিশিষ্টগুলিতে ফাইল স্কোপের কথা উল্লেখ করেছে
চুবসদাদ

2
আমি পরামর্শ দেব যে ফাইল স্কোপটি সংকলকটির পরিবর্তে লিঙ্কারের একটি প্রত্নতত্ত্ব, তাই ভাষার মানটিতে খুব বেশি মনোযোগ নাও পেতে পারে। কঠোরভাবে এটি সম্ভবত "সংকলন ইউনিটের সুযোগ"।
ক্লিফোর্ড

8
"কনস্টারের অর্থ" কেবলমাত্র পঠনযোগ্য, ধ্রুবক নয় "অর্থাত্" সংকলক, যদি আপনি এই কনট কনটকে কোনওরকম পরিবর্তন করার চেষ্টা করতে দেখেন তবে খুব জোরে ছাঁকুন। " একই কারণে কিছু একই সাথে কনস্ট এবং অস্থির হতে পারে।
ড্যান

5
এটি আরও বেশি "সংকলক, আপনি যদি দেখেন যে এই কনস্ট জিনিসটি সংশোধন করার চেষ্টা করছেন (বা অন্য কাউকে এটি করার অনুমতি দিন)", খুব জোরে ছাঁকুন। বেশিরভাগ প্রসঙ্গে, constভেরিয়েবলের ভিউয়ের ক্ষেত্রে প্রযোজ্য এবং ভেরিয়েবলটি নিজেই নয়, অন্য কারও কাছে constএকই ভেরিয়েবলের অ- দৃষ্টিভঙ্গি থাকতে পারে এবং সংকলক যখন তারা এটি পরিবর্তন করবে তখন বেশ নীরব থাকবে।
বেন ভয়েগট

1
@ বেন: কেবল পরিষ্কারভাবে বলতে constগেলে , সি ++ 0x নির্দিষ্ট ব্যবহারটি সরিয়ে দেয় না , তবে নতুনটি constexprপরিবর্তে ব্যবহার করা যেতে পারে (এবং অন্যান্য পরিস্থিতিতেও)। আসলে, সি ++ 0 এক্স স্ট্যান্ডার্ডটি সেই দৃশ্যে ব্যবহারের ক্ষমতা constঅ-অবিচ্ছেদ্য "আক্ষরিক ধরণের" তেও প্রসারিত করে । আমি মনে করি যে আমি constexprএই ক্ষেত্রেগুলির জন্য ব্যবহার করতে পছন্দ করব , যেহেতু আপনি প্রি-সি ++ 0 এক্স সংকলকগুলির সাথে পশ্চাদপটে সামঞ্জস্যতা ভঙ্গ করছেন।
মাইকেল বুড়

4

সি ++ 17 স্ট্যান্ডার্ড খসড়া ফাইল স্কোপ থেকে constবোঝায়static

এটিতে যা উল্লেখ করা হয়েছিল তার এই উদ্ধৃতি: https://stackoverflow.com/a/3709257/895245

সি ++ 17 n4659 স্ট্যান্ডার্ড খসড়া 6.5 "প্রোগ্রাম এবং লিঙ্কেজ":

3 একটি নামের নাম স্থান (6.3.6) এর নাম থাকলে এটির অভ্যন্তরীণ যোগসূত্র রয়েছে

  • (৩.১) - একটি পরিবর্তনশীল, ফাংশন বা ফাংশন টেম্পলেট যা স্পষ্টভাবে স্থির হিসাবে ঘোষণা করা হয়; বা,
  • (৩.২) - অ-উদ্বায়ী কনস্ট-কোয়ালিফাইড টাইপের একটি নন-ইনলাইন ভেরিয়েবল যা স্পষ্টভাবে বাহ্যিক হিসাবে ঘোষিত হয় না বা পূর্বে বাহ্যিক সংযোগ বলে ঘোষণা করা হয় না; অথবা
  • (৩.৩) - বেনামী ইউনিয়নের ডেটা সদস্য।

আনেকেক্স সি (তথ্যমূলক) সামঞ্জস্যতা, সি .১.২ ধারা 6: "বুনিয়াদি ধারণাগুলি" কেন সি থেকে এই পরিবর্তন করা হয়েছিল তা যুক্তি দেয়:

.5.৫ [এছাড়াও 10.1.7]

পরিবর্তন: ফাইল স্কোপের একটি নাম যা সুস্পষ্টভাবে কনস্টেড হিসাবে ঘোষিত হয় এবং স্পষ্টভাবে বাহ্যিক হিসাবে ঘোষিত হয় না, এর অভ্যন্তরীণ সংযোগ থাকে, যখন সিতে এটির বাহ্যিক সংযোগ থাকে।

যুক্তি: যেহেতু সি ++ তে অনুবাদ করার সময় কনস্ট অবজেক্টগুলি মান হিসাবে ব্যবহৃত হতে পারে, তাই এই বৈশিষ্ট্যটি প্রতিটি কনস্ট অবজেক্টের জন্য একটি সুস্পষ্ট আরম্ভকারী সরবরাহ করার জন্য প্রোগ্রামারদের প্রতি অনুরোধ করে। এই বৈশিষ্ট্যটি ব্যবহারকারীকে একাধিক অনুবাদ ইউনিটে অন্তর্ভুক্ত উত্স ফাইলগুলিতে কনট অবজেক্টগুলি রাখার অনুমতি দেয়।

মূল বৈশিষ্ট্যের উপর প্রভাব: সুনির্দিষ্ট সংজ্ঞাযুক্ত বৈশিষ্ট্যের শব্দার্থবিজ্ঞানে পরিবর্তন।

রূপান্তরকরণের অসুবিধা: অর্থগত রূপান্তর।

কত ব্যাপকভাবে ব্যবহৃত: কদাচিৎ।

আরও দেখুন: কেন কনস্ট্রিট সি ++ এ অভ্যন্তরীণ সংযোগ বোঝায় না, যখন এটি সি তে হয় না?

শিরোনামের পরিবর্তে আপনি সম্ভবত যা করতে চান

এখানে বিস্তারিতভাবে ব্যাখ্যা করা হয়েছে: সি এবং সি ++ এর মধ্যে 'কনস্ট্যান্ট স্ট্যাটিক' অর্থ কী?

  • প্রাক সি ++ 17: externশিরোনামে, সিপিপি ফাইলে সংজ্ঞা
  • সি ++ 17 পোস্ট করুন: শিরোনামে ইনলাইন ভেরিয়েবল

ধন্যবাদ, যদিও আমি মনে করি না যে এটি সি ++ ১ in এর চেয়েও সি ++ 98 এর তুলনায় একটি সুযোগ, এবং ২০১০ সালে প্রশ্নটি জিজ্ঞাসা করা হয়েছিল Moreover তাছাড়া, আপনার উত্তরটি কেবল সংযোগ নির্দিষ্টকরণকারক হিসাবে (স্থিতির ক্ষেত্রের) স্থির সাথে সম্পর্কিত , এবং প্রশ্নটি বিভিন্ন প্রসঙ্গে শব্দার্থবিজ্ঞানের বিষয়ে বিশেষভাবে জিজ্ঞাসা করেছিল।
ক্লিফোর্ড

@ ক্লিফোর্ড হ্যাঁ, সি ++ 17 এর চেয়ে অবশ্যই বয়স্ক, সমস্ত মান পড়তে অলস ;-) ফাইল স্কোপ অংশটি পরিষ্কার করে দেবে।
সিরো সান্তিলি 郝海东 冠状 病 六四 事件
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.