আমি সি ++ এ ফাংশন ওভারলোডিং সম্পর্কে শিখছি এবং এটি জুড়ে এসেছি:
void display(int a)
{
cout << "int" << endl;
}
void display(unsigned a)
{
cout << "unsigned" << endl;
}
int main()
{
int i = -2147483648;
cout << i << endl; //will display -2147483648
display(-2147483648);
}
আমি যা বুঝতে পেরেছি সেগুলি থেকে, int
পরিসরে প্রদত্ত যে কোনও মান (আমার ক্ষেত্রে int
4 বাইট) কল করবে display(int)
এবং এই ব্যাপ্তির বাইরের কোনও মান অস্পষ্ট হবে (যেহেতু সংকলকটি কল করতে পারে যে কোন ফাংশনটি ঠিক করতে পারে না)। int
এটির সর্বনিম্ন মান বাদে মানগুলির সম্পূর্ণ পরিসরের জন্য বৈধ, -2147483648
যেখানে ত্রুটির সাথে সংকলন ব্যর্থ হয়
অতিরিক্ত লোড কল
display(long int)
অস্পষ্ট
কিন্তু একটি একই মান গ্রহণ int
এবং মান দেয় মুদ্রণ 2147483648
। আমি আক্ষরিকভাবে এই আচরণের সাথে বিভ্রান্ত।
সর্বাধিক নেতিবাচক সংখ্যাটি পাস করার পরে কেন এই আচরণটি পর্যবেক্ষণ করা হয়? (আচরণ একই একটি হল short
সঙ্গে ব্যবহার করা হয় -32768
- কোনো ক্ষেত্রে, আসলে যেখানে ঋণাত্মক সংখ্যা এবং ধনাত্মক সংখ্যা একই বাইনারি উপস্থাপনা আছে)
সংকলক ব্যবহৃত: জি ++ (জিসিসি) 4.8.5