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: