Slytherin
جمعه 10 آذر 1391, 09:16 صبح
درود،
همه می دونیم که به سه طریق امکان ارسال آرگومان هایمان به توابع وجود دارد:
1.ارسال از طریق مقدار و مثلا در تابع داریم:
void Example(int);
در این حالت یک کپی از اطلاعات ارسال در حافظه به وجود می آید و هیچ تغییری روی آرگومان ما صورت نمیگیرد.
2.ارسال از طریق ارجاع و مثلا در تابع داریم:
void Example(int&);
در این حالت تابع به طور مستقیم با مقدار ارسالی کار میکند و در صورتی که تغییری در مقدار آرگومان صورت گیرد، در خارج از تابع هم اعمال می شود...
ولی حالت سومی نیز وجود دارد:
3.ارسال از طریق ارجاع ثابت و مثلا در تابع داریم:
void Example(const int&);
در این حالت با اینکه آرگومان ما از طریق ارجاع ارسال میشود ولی پس از اتمام کار تابع هیچ تغییری در مقدار اولیه به وجود نمی آید. (مانند حالت اول)
حالا با بیان این مقدمات این سؤال مطرح می شود که اگر حالت اول و حالت سوم هیچ تفاوتی از نظر عملکرد با یکدیگر ندارند، پس ما اصلا به چه دلیلی از حالت اول استاده می کنیم؟ با توجه به اینکه حالت سوم فضای کمتری (دقیقا نصف) در حافظه اشغال میکند اصلا چرا حالت اول در زبان های برنامه نویسی گنجانده شده است؟ آیا به غیر از میزان اشغال حافظه، پارامترهای دیگری هم مد نظر هستند که باعث بشوند تا به جای حالت سوم از حالت اول استفاده کنیم؟
حقیقتا این بحث دیروز در یکی از کلاس های درس توسط من مطرح شد و هیچ یک از اساتید و یا دانشجویان نتوانستند پاسخ دقیقی به این سؤال بدهند و تنها احتمالی که دادیم این بود که در حالت سوم احتمالا فشار بیشتری به پردازنده می آید و زمان بیشتری صرف ارسال و دریافت اطلاعات می شود...
شما چه فکری می کنید؟
لطفا اگر منبع خوبی در این رابطه دارید بهم معرفی کنید.
با تشکر از همگی
همه می دونیم که به سه طریق امکان ارسال آرگومان هایمان به توابع وجود دارد:
1.ارسال از طریق مقدار و مثلا در تابع داریم:
void Example(int);
در این حالت یک کپی از اطلاعات ارسال در حافظه به وجود می آید و هیچ تغییری روی آرگومان ما صورت نمیگیرد.
2.ارسال از طریق ارجاع و مثلا در تابع داریم:
void Example(int&);
در این حالت تابع به طور مستقیم با مقدار ارسالی کار میکند و در صورتی که تغییری در مقدار آرگومان صورت گیرد، در خارج از تابع هم اعمال می شود...
ولی حالت سومی نیز وجود دارد:
3.ارسال از طریق ارجاع ثابت و مثلا در تابع داریم:
void Example(const int&);
در این حالت با اینکه آرگومان ما از طریق ارجاع ارسال میشود ولی پس از اتمام کار تابع هیچ تغییری در مقدار اولیه به وجود نمی آید. (مانند حالت اول)
حالا با بیان این مقدمات این سؤال مطرح می شود که اگر حالت اول و حالت سوم هیچ تفاوتی از نظر عملکرد با یکدیگر ندارند، پس ما اصلا به چه دلیلی از حالت اول استاده می کنیم؟ با توجه به اینکه حالت سوم فضای کمتری (دقیقا نصف) در حافظه اشغال میکند اصلا چرا حالت اول در زبان های برنامه نویسی گنجانده شده است؟ آیا به غیر از میزان اشغال حافظه، پارامترهای دیگری هم مد نظر هستند که باعث بشوند تا به جای حالت سوم از حالت اول استفاده کنیم؟
حقیقتا این بحث دیروز در یکی از کلاس های درس توسط من مطرح شد و هیچ یک از اساتید و یا دانشجویان نتوانستند پاسخ دقیقی به این سؤال بدهند و تنها احتمالی که دادیم این بود که در حالت سوم احتمالا فشار بیشتری به پردازنده می آید و زمان بیشتری صرف ارسال و دریافت اطلاعات می شود...
شما چه فکری می کنید؟
لطفا اگر منبع خوبی در این رابطه دارید بهم معرفی کنید.
با تشکر از همگی