static
দুর্ভাগ্যক্রমে কী- ওয়ার্ডটির সি ++ তে কয়েকটি ভিন্ন সম্পর্কহীন অর্থ রয়েছে
যখন ডেটা সদস্যদের জন্য ব্যবহার করা হয় তখন এর অর্থ হ'ল ডেটা ক্লাসে বরাদ্দ করা হয় এবং উদাহরণ হিসাবে নয়।
যখন কোনও ফাংশনের অভ্যন্তরে ডেটা ব্যবহার করা হয় তখন এর অর্থ হ'ল ডেটাটি স্থিতিশীলভাবে বরাদ্দ করা হয়, প্রথম বার ব্লকটি প্রবেশ করার পরে আরম্ভ না করা হয় এবং প্রোগ্রামটি বন্ধ না হওয়া পর্যন্ত স্থায়ী হয়। এছাড়াও ভেরিয়েবলটি কেবল ফাংশনের অভ্যন্তরে দৃশ্যমান। স্থানীয় স্ট্যাটিক্সের এই বিশেষ বৈশিষ্ট্যটি প্রায়শই সিলেটলেটগুলির অলস নির্মাণ বাস্তবায়নের জন্য ব্যবহৃত হয়।
সংকলন ইউনিট স্তরে (মডিউল) ব্যবহৃত হলে এর অর্থ হল ভেরিয়েবলটি একটি গ্লোবালের মতো (যেমন বরাদ্দকৃত এবং প্রাথমিকভাবে main
চালানো হয় এবং main
প্রস্থানের পরে ধ্বংস হয় ) তবে পরিবর্তনশীলটি অন্য সংকলন ইউনিটে অ্যাক্সেসযোগ্য বা দৃশ্যমান হবে না ।
আমি প্রতিটি ব্যবহারের জন্য সবচেয়ে গুরুত্বপূর্ণ যে অংশটি কিছুটা জোর দিয়েছি। ব্যবহার (3) কিছুটা নামবিহীন নেমস্পেসের পক্ষে নিরুৎসাহিত করা হয়েছে যা অ-রফতানি শ্রেণীর ঘোষণার জন্যও অনুমতি দেয়।
আপনার কোডে static
কীওয়ার্ডটি 2 নম্বর অর্থের সাথে ব্যবহৃত হয় এবং ক্লাস বা উদাহরণগুলির সাথে কিছুই করার থাকে না ... এটি ফাংশনের একটি পরিবর্তনশীল এবং এর কেবল একটি অনুলিপি থাকবে।
যথাযথভাবে iammilind বলেছিল যে ফাংশনটি কোনও টেম্পলেট ফাংশন হলে সেই পরিবর্তনশীলটির একাধিক উদাহরণ থাকতে পারে (কারণ সেক্ষেত্রে প্রকৃতপক্ষে কার্যক্রমে প্রোগ্রামটি বিভিন্ন কপির মধ্যে উপস্থিত থাকতে পারে)। এমনকি কোর্সের ক্ষেত্রেও ক্লাস এবং উদাহরণগুলি অপ্রাসঙ্গিক ... নীচের উদাহরণটি দেখুন:
#include <stdio.h>
template<int num>
void bar()
{
static int baz;
printf("bar<%i>::baz = %i\n", num, baz++);
}
int main()
{
bar<1>(); // Output will be 0
bar<2>(); // Output will be 0
bar<3>(); // Output will be 0
bar<1>(); // Output will be 1
bar<2>(); // Output will be 1
bar<3>(); // Output will be 1
bar<1>(); // Output will be 2
bar<2>(); // Output will be 2
bar<3>(); // Output will be 2
return 0;
}
static int i
যা উদাহরণের সাথে নির্দিষ্টতার ক্ষেত্রকে নির্দিষ্ট করে, যাতে উদাহরণস্বরূপo1.foo(); // i = 1
এবং$o2.foo(); // i = 1
...?