اولین بار است که به این وب‌سایت می‌آیید. راهنما را مطالعه کنید!
x
موسسه خیریه محک

شهر ریاضی بازی-ریاضی

قوانین تبدیل خودکار انواع داده

+2 امتیاز
395 نمایش

تو یه عبارت به شکل زیر می‌دونیم کامپایلر تبدیل‌های خودکاری رو انجام می‌ده.


int x;
long int y;
short int z; float a;
double b; cin>>x>>y>>z;
cin>>a>>b; cout<<a(b/x) + b/a(x-z);

طبیعتاً کامپایلر از یه سری قوانین برای این کار استفاده می‌کنه. سوال من دقیقاً اینه که این قوانین چیه؟
یک مشکل در مورد C++ این است که هم‌اکنون گرایشی قوی در زبان وجود دارد که شما را وادار می‌کند پیش از انجام هر کاری، همه‌ی جوانب آن را بدانید. (Larry Wall)
پرسیده شده جمعه ۱۰ آذر ۱۳۹۱ در C++ توسط CPP_Crawler2  
بازتگ شده جمعه ۲۳ فروردین ۱۳۹۲ توسط admin

1 پاسخ

0 امتیاز

اولین نکته اینه که تبدیل به صورتی انجام می‌شه که دقت از دست نره. یعنی در صورتی که تبدیل بین int و long int باید انجام بشه در اولین تلاش کامپایلر سعی می‌کنه int رو به long int تبدیل کنه. البته این در عملگرهاست. مثلاً

int a;
long int b;
long int c = a+b;

در آرگومان‌های تابع شیء فراخوانده شده باید تبدیل به نوع آرگومان تابع بشه.

void f(int x);
...
long int a;
f(a);

در این حالت long به int تبدیل شده و دقت از دست می‌ره.
در این گام ابتدا سعی می‌شه تبدیل به انواع شبیه (مثلاً صحیح به صحیح و اعشاری به اعشاری) انجام بشه.
در کامپایلرهای قدیمی تبدیل صحیح به اعشاری و بالعکس هم در گام بعدی ممکن بود که در کامپایلرهای جدید تلاش برای این تبدیل به خطا منجر می‌شه

هیچ پژوهش انسانی نمی‌تواند ادعای علمی بودن داشته باشد، مگر این‌که از برهان ریاضی برخوردار باشد (لئوناردو داوینچی)
پاسخ داده شده یکشنبه ۲۵ فروردین ۱۳۹۲ توسط prodo  
ویرایش شده یکشنبه ۲۵ فروردین ۱۳۹۲ توسط prodo

باید دقت کنیم که از نظر کامپایلر char هم در دسته‌ی اعداد صحیح جا می‌گیره.