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

فهمدن نوع متغیر auto

+3 امتیاز

سلام من اگر بخوام بفهمم نوع متغیری که ا auto تعریف شده چیه چکار بایدبکنم؟

مثلا فرضا داخل کد زیر میخوام بدونم متغیر  var داخل test نوعش چیه ؟

#include <iostream>
#include <string>

using namespace std;

template<class T>
struct A
{
    A& get_refrence(){
        return *this;
    }
};

template<class T>
void test(T& t){
    auto& var=t.get_refrence();
    //az koja bedoonam no e var chie inja ?
}

int main()
{
    test(A<float>());
    test(A<std::string>());
}

 

سوال شده مرداد 17, 1393  بوسیله ی Xavi (امتیاز 627)   24 83 110
دوباره تگ گذاری شد مرداد 17, 1393 بوسیله ی BlueBlade
۲ نوع فهمیدن هست .
اینکه بخواید نوع var رو بدونید و یه متغییر از همون نوع درست کنید .
اینکه بخواید نوع var رو بدونید و و مثلا اون رو توی خروجی چاپ کنید .
کدومش ؟
می خواستم هم نوعشو بدونم و هم بتونم ازش با همون نوع درست کنم
پستی که پایین نوشته شده درسته .
ولی توی اون یکی مورد میتونی اینطوری اینکارو بکنی :decltype(var) mynew_var
در مورد decltype هم اینجا رو نگاه کن :
http://www.7khatcode.com/index.php?qa=3180&qa_1=%D9%88%DB%8C%DA%98%DA%AF%DB%8C-%D9%87%D8%A7%DB%8C-c-11
البته کدتون undefine behavior هم هست چون دارید test(T& t) رو با مقدار temp صدا میزنین یعنی متغیر از نوع rvalue رو با آدرس دارید میگیرید درستش test(T&&  t هست

1 پاسخ

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

سلام!

می تونید از typeid در typeinfo استفاده کنید... یه مثال ساده:

example.cpp

#include <iostream>
#include <typeinfo>

using namespace std;

int main() {
	int a = 1;
	int b = 2;
	auto c = a+b;
	cout << typeid(c).name() << endl;
	return 0;
}

برای کامپایل با ++g از این دستور استفاده کردم:

g++ example.cpp -std=c++11
پاسخ داده شده مرداد 17, 1393 بوسیله ی مسعود لپه‌چی (امتیاز 928)   12 31 50
انتخاب شد مرداد 17, 1393 بوسیله ی Xavi
میشه یک template بدون تعریف هم ساخت و نوع رو از طریق error هایی که میده فهمید آخه هم خیلی وقت ها خواناتره و هم این که typeid همیشه جواب درست رو نمیده
.کدی مثل این  https://ideone.com/UVeJPg
این error رو میده :
error: ‘Type_Identifier<const A<float>&> a’ has incomplete type
  Type_Identifier < decltype(var)> a;
که مقدار const A<float>&>l’ .. همون نوع auto هست
...