r00tkit
سه شنبه 04 آبان 1389, 00:13 صبح
سلام
شما مطمئنا" می دونید C++ توسط ISO اپدیت شده که codename این اپدیت C++0x هستش و در Visual Studio 2010 این ویژگی ها پشتیبانی می شه
این نوشته سعی می کنه به بررسی این ویژگی ها بپردازه
پیش نیاز ها : درک متوسط از زبان C++
امید وارم مفید واقع بشه ، با تشکر Geek1982
1) کلمه ی کلیدی auto :
این کلمه کلیدی برای تشخیص(استنتاج) نوع تایپ از روی عبارت استفاده می شه ( همون var تو C#)
البته قبلا" این کلمه کلیدی در کنار این لیست (storage-class specifiers )
auto
register
static
extern
بودش ولی استفاده نمی شد
مثال: متغیر های auto محدود به اسکوپ می شن که به صورت پیش فرض همن طوریه
int main()
{
auto int i = 0; // Explicitly declared as auto.
int j = 0; // Implicitly auto.
}
کار بورد فعلی:
auto nVariable = 16;شما یه متغیبر بدون type مشخص می کنید و کامپایلر ار روی عبارت طرف راست ان نوع عبارت رو تعیین می کنه حالا کد با کامپایلر تبدیل می شه به:
auto nVariable = 16;شما حتما" به متغییر هاتون مقدار بدین در غیر این صورت کامپایلر error می گیره
نکتهی مهم: نوع عبارات در زمان کامپایل تشخیص داد می شه نه اجرا
چند مثال دیگه :
const auto PI = 3.14; // double
volatile auto IsFinished = false; // bool
const auto nStringLen = strlen("CodeProject.com");
auto iArray = new int[10]; // int*
محدودیت ها :
ارایه نمی تونه auto باشه
auto aArray1[10];
auto aArray2[]={1,2,3,4,5};
// error C3532: the element type of an array
// cannot be a type that contains 'auto'
نمی تونه نوع برگشتی یا ارگومان تابع باشه
auto ReturnDeduction();
void ArgumentDeduction(auto x);
// C3533: 'auto': a parameter cannot have a type that contains 'auto'به جاش می تونید از template استفاده کنید
نمی تونه عضو کلاس یا struct باشه مگر اینکه static باشه
به این صورت هم نمی شه استفاده کرد { جمله هام تموم شده :) }
auto a=10, b=10.30, s="new";
کی باید از auto استفاده کنیم
زمانی که نوع تایپ وابسطه به کامپایلر/ پلتفورم هستش
auto nLength = strlen("The auto keyword.");زمانی که تایپ طولانی هستش
std::vector<std::string> Strings;و کلی نکتهی دیگه :)
بیشتر بخونید :auto Keyword (type deduction) (http://msdn.microsoft.com/en-us/library/dd293667.aspx)
موضوع بعدی :decltype
شما مطمئنا" می دونید C++ توسط ISO اپدیت شده که codename این اپدیت C++0x هستش و در Visual Studio 2010 این ویژگی ها پشتیبانی می شه
این نوشته سعی می کنه به بررسی این ویژگی ها بپردازه
پیش نیاز ها : درک متوسط از زبان C++
امید وارم مفید واقع بشه ، با تشکر Geek1982
1) کلمه ی کلیدی auto :
این کلمه کلیدی برای تشخیص(استنتاج) نوع تایپ از روی عبارت استفاده می شه ( همون var تو C#)
البته قبلا" این کلمه کلیدی در کنار این لیست (storage-class specifiers )
auto
register
static
extern
بودش ولی استفاده نمی شد
مثال: متغیر های auto محدود به اسکوپ می شن که به صورت پیش فرض همن طوریه
int main()
{
auto int i = 0; // Explicitly declared as auto.
int j = 0; // Implicitly auto.
}
کار بورد فعلی:
auto nVariable = 16;شما یه متغیبر بدون type مشخص می کنید و کامپایلر ار روی عبارت طرف راست ان نوع عبارت رو تعیین می کنه حالا کد با کامپایلر تبدیل می شه به:
auto nVariable = 16;شما حتما" به متغییر هاتون مقدار بدین در غیر این صورت کامپایلر error می گیره
نکتهی مهم: نوع عبارات در زمان کامپایل تشخیص داد می شه نه اجرا
چند مثال دیگه :
const auto PI = 3.14; // double
volatile auto IsFinished = false; // bool
const auto nStringLen = strlen("CodeProject.com");
auto iArray = new int[10]; // int*
محدودیت ها :
ارایه نمی تونه auto باشه
auto aArray1[10];
auto aArray2[]={1,2,3,4,5};
// error C3532: the element type of an array
// cannot be a type that contains 'auto'
نمی تونه نوع برگشتی یا ارگومان تابع باشه
auto ReturnDeduction();
void ArgumentDeduction(auto x);
// C3533: 'auto': a parameter cannot have a type that contains 'auto'به جاش می تونید از template استفاده کنید
نمی تونه عضو کلاس یا struct باشه مگر اینکه static باشه
به این صورت هم نمی شه استفاده کرد { جمله هام تموم شده :) }
auto a=10, b=10.30, s="new";
کی باید از auto استفاده کنیم
زمانی که نوع تایپ وابسطه به کامپایلر/ پلتفورم هستش
auto nLength = strlen("The auto keyword.");زمانی که تایپ طولانی هستش
std::vector<std::string> Strings;و کلی نکتهی دیگه :)
بیشتر بخونید :auto Keyword (type deduction) (http://msdn.microsoft.com/en-us/library/dd293667.aspx)
موضوع بعدی :decltype