ورود

View Full Version : مبتدی: شرکت پذیری و تقدم عملگر درج جریان



ehsan_faal
یک شنبه 17 خرداد 1394, 13:49 عصر
سلام دوستان.
مگه شرکت پذیری عملگر درج جریان >> از چپ به راست نیست؟(توی کتاب دایتل گفته این مطلبو)
خب طبق این قانون میشه بگید توی کد زیر چرا وقتی متغیر c رو به جای i توی qDebug میاریم مقدارش بعد از محاسبه فاکتوریلش میاد؟

#include <QCoreApplication>
#include <QtDebug>
using namespace std;
int * Factorial(int*);
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
for(int i=0;i<10;i++)
{
int c=i;
qDebug()<<i<<"!:"<<*Factorial(&c);
}
return a.exec();
}
int *Factorial(int* a)
{
int holder=*a;
while(holder>1)
{
(*a)*=--holder;
}
return a;
}



خروجی:
0 !: 0
1 !: 1
2 !: 2
3 !: 6
4 !: 24
5 !: 120
6 !: 720
7 !: 5040
8 !: 40320
9 !: 362880



و اینم کدی که باید درست کار کنه اما نمیکنه:

#include <QCoreApplication>
#include <QtDebug>
using namespace std;
int * Factorial(int*);
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
for(int i=0;i<10;i++)
{
int c=i;
qDebug()<<c<<"!:"<<*Factorial(&c);
}
return a.exec();
}
int *Factorial(int* a)
{
int holder=*a;
while(holder>1)
{
(*a)*=--holder;
}
return a;
}


خروجی:
0 !: 0
1 !: 1
2 !: 2
6 !: 6
24 !: 24
120 !: 120
720 !: 720
5040 !: 5040
40320 !: 40320
362880 !: 362880

rahnema1
یک شنبه 17 خرداد 1394, 22:02 عصر
سلام
یک نکته اینکه شرکت پذیری و جابجایی در مورد عملگرهای اصلی صادق هست نه عملگرهای سربارگذاری شده
اما یک نکته دیگه هم اینکه ترتیب اجرای عملوند های بیشتر عملگر ها ( از جمله عملگرهای سربار گذاری شده) مشخص نیست. حالا اگه یک متغیر عددی مثل c در بین اینها باشه که مقدارش هم تغییر کنه اینجا رفتار تعریف نشده داریم
در منبع زیر توضیح داده شده:
http://en.cppreference.com/w/cpp/language/eval_order