sizeof
অপারেটরের অপারেন্ড যেমন মূল্যায়ন না করা হয়, আপনি এটি করতে পারেন:
int f(); //no definition, which means we cannot call it
int main(void) {
printf("%d", sizeof(f()) ); //no linker error
return 0;
}
অনলাইন ডেমো: http://ideone.com/S8e2Y
এটি হ'ল, f
যদি sizeof
কেবলমাত্র এটি ব্যবহৃত হয় তবে আপনাকে ফাংশনটি সংজ্ঞায়িত করতে হবে না । এই কৌশলটি বেশিরভাগ সি ++ টেমপ্লেট ধাতব প্রোগ্রামে ব্যবহৃত হয়, এমনকি সি ++ তেও অপারেন্ড sizeof
মূল্যায়ন হয় না।
কেন এই কাজ করে? এটি কাজ করে কারণ sizeof
অপারেটর মান অনুযায়ী অপারেট করে না , পরিবর্তে এটি এক্সপ্রেশনের ধরণের উপর কাজ করে । সুতরাং আপনি যখন লিখবেন sizeof(f())
, এটি এক্সপ্রেশনটির ধরণের উপর পরিচালিত হয় f()
এবং যা ফাংশনটির রিটার্ন টাইপ ছাড়া কিছুই নয় f
। রিটার্নের ধরণটি সর্বদা সমান, যদি কার্য সম্পাদন করে তবে ফাংশনটি কী মান দেয় তা বিবেচনা করে না।
সি ++ এ আপনি এটিও করতে পারেন:
struct A
{
A(); //no definition, which means we cannot create instance!
int f(); //no definition, which means we cannot call it
};
int main() {
std::cout << sizeof(A().f())<< std::endl;
return 0;
}
তবুও দেখে মনে হচ্ছে, sizeof
আমি প্রথমে একটি উদাহরণ তৈরি করছি A
, লিখে লিখে A()
, এবং তারপরে f
উদাহরণটি ফাংশনটি কল করে , লিখেছি A().f()
, তবে এরকম কিছুই ঘটে না।
ডেমো: http://ideone.com/egPMi
এখানে আরও একটি বিষয় যা এর আরও কিছু আকর্ষণীয় বৈশিষ্ট্য ব্যাখ্যা করে sizeof
: