استفاده از :: در فراخوانی Template - هفت خط کد انجمن پرسش و پاسخ برنامه نویسی

استفاده از :: در فراخوانی Template

+2 امتیاز

سلام دوستان. توی اینترنت کد زیر رو دیدم. اگه دقت بکنید قبل از تابع min زمانی که می خواد مثدارش رو چاپ کنه از کاراکترهای :: استفاده شده. این کاراکترها چه تاثیری در برنامه دارن و کارشون چیه؟ ممنون.

#include <iostream>
using namespace std;
template <class T>
T min(T a, T b)
{
	return a<b ? a : b;
}
int main()
{
	cout << ::min(17,3) << endl;
}

 

سوال شده شهریور 19, 1393  بوسیله ی Pashmak (امتیاز 644)   8 15 31

1 پاسخ

+4 امتیاز
 
بهترین پاسخ

ما در فضای نام std تابعی به اسم min هم داریم 

داخل کد بالا شما تابع با همین اسم رو دوباره تعریف کردید

چون از using namespace std ; استفاده کردید تمام فضای نام std از داخل main قابل دسترس میشه .

وقتی که بنویسید min(17,3 کامپایلر نمیتونه تشخیص بده از min که تعریف شده استفاده کنه یا از min داخل std 

اون :: برای این هستش که اسم از فضای نام global خونده بشه 

#include <iostream>
#include <algorithm>
using namespace std;
template <class T>
T min(T a, T b)
{
    return a<b ? a : b;
}
int main()
{
    min(1,2);//error ambiguous call
    ::min(1,2);//ok  inja func min ke sakhtim call mishe
    std::min(1,2);//ok inja func  min az fazaye name std call mishe
}

 

پاسخ داده شده شهریور 19, 1393 بوسیله ی BlueBlade (امتیاز 15,315)   15 18 89
انتخاب شد شهریور 20, 1393 بوسیله ی Pashmak
بابت پاسخ ممنون. لینک زیر رو ببینید
http://www.7khatcode.com/5097/%D8%AA%D9%81%D8%A7%D9%88%D8%AA-%23include-%D9%88-using-namespace-%D8%AF%D8%B1-c-%DA%86%DB%8C%D8%B3%D8%AA%D8%9F
 توی لینک بالا توابع تعریف شده در std رو نشون میده اما بین این توابع، تابعی به نام min نمی بینم. میشه بگید تابع min رو در کجای std تعریف شده؟
سلام اون ها توابع موجود درهدر iostream هستند.
توابع و اسم های موجود در std خیلی خیلی بیشتر هستن.
 تابع min هم  داخل هدر algorithm هست
برای دیدن توابع موجود از refrence های آنلاین استفاده کنید که معتبرترینشون این هست :‌ http://en.cppreference.com/w/
من از طریق خود ide نتونستم محتوای موجود در std رو ببینم اما لینک زیر میگه تا حدودی چه توابعی در اون وجود دارن
http://en.wikipedia.org/wiki/C%2B%2B_Standard_Library
اما واسه مثال اشاره ای به cin و cout نکرده مه در فضای نام std هستن همچنینسرچ کردن Std توی لینک زیر، لیست کامل توابعی که در اون وجود دارن رو نمیده
http://en.cppreference.com/mwiki/index.php?title=Special%3ASearch&search=std&button=
از این جا کتاب اول رو بگیرید http://goo.gl/1F60SU
فصل ۳۰-۴۰ تمام توابع موجود ذکر شدن.
بابت کتاب ممنون
...