تفاوت auto با decltype - هفت خط کد انجمن پرسش و پاسخ برنامه نویسی

تفاوت auto با decltype

+1 امتیاز
این 2 با هم چه تفاوتی دارند زمانیکه نوع مشخص نباشه از هر 2 میشه استفاده کرد؟
سوال شده مهر 16, 1393  بوسیله ی ققنوس (امتیاز 151)   4 20 29

2 پاسخ

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

یکی از تفاوت هایی که بین decltype و auto وجود داره این هستش که decltype دقیقاً متغیری به ویژگی متغیر مرجع براتون تولید می کنه بر خلاف auto. به مثال زیر توجه کنید.

const string message = "Test";
const string& foo()
{
return message;
}

اگر شما تابع foo را به f1 نسبت بدید چی پیش میاد.

auto f1 = foo();

درواقع f1 به صورت زیر تعریف شده.

string f1;

اگر هم قصد داشته باشید که تعریف کاملاً همانند foo باشه .

const auto& f1 = foo();

حالا برای اینکه این کارو انجام ندیدیم از decltype استفاده می کنیم. 

decltype(foo()) f2 = foo();

حالا توی c++14 از این هم ساده تر شده :

decltype(auto) f3 = foo();

 

پاسخ داده شده مهر 21, 1393 بوسیله ی مصطفی ساتکی (امتیاز 21,998)   24 34 75
انتخاب شد مهر 21, 1393 بوسیله ی ققنوس
+2 امتیاز

سلام.

همیشه نوع مشخصه . فقط این ۲ تا کار شما رو ساده تر میکنه .

وقتی شما به decltype اسم متغییری رو معرفی میکنید ، متغییر شما رو از نوع همون متغییری که بهش معرفی کردید درست میکنه .

auto نسبت به مقداری که به متغییر داده میشه نوعش مشخص میشه .

مثلا :


int main(char* argv,int argc) 
{
    decltype(argv) s = 0;
    auto p = 33.33f;
}

متغییر s همنوع متغییر argv میشه .

متغییر p همنوع مقداری که بهش داده شده میشه که اینجا مقدار از نوع float است . پس نوع متغییر p درواقع float میشه .

پاسخ داده شده مهر 17, 1393 بوسیله ی Ali Rahbar (امتیاز 4,240)   6 16 46
...