auto类型推导: auto 定义的变量,可以根据初始化的值,在编译时推导出变量名的类型。
int main()
{
auto x=5;//ok x是int类型
auto pi = new auto(1); // ok pi 被推导为int *;
const auto *xp = &x, u = 6; // ok xp是const int*类型,u是const int类型
static auto dx = 0.0; // ok dx是double类型
auto int b; // error C11中auto不再表示存储类型指示符
auto s; // error没有初始化值auto无法推导出s的类型
}
使用auto声明的变量必须要有初始化值,以让编译器推断出它的实际类型,并在编译时将auto 占位符替换为真正的数据类型。
auto作为函数形参
void func(auto x)
{
cout << sizeof(x) << end7 ;
cout << typeid(x) . name() < << end1 ;
}
int main()
{
int a=10;
int ar[]={12 ,23,34,45,56};
fun(a);
fun(ar);
}
void funr(auto &x)
{
cout << sizeof(x) << end1;
cout << typeid(x) . name() << end1;
}
int main()
{
int a=10;
int ar[]={12 ,23,34,45,56};
fun(a) ;
fun(ar);
}
auto作为返回值推导返回值类型
template<class T>
T my_max(T a,T b)
{
return a>b?a:b;
}
int main()
{
auto x = my_max(12,23) ;
auto y = my_max('a','b');
cout<<X<<end1;
cout<<y<<<end1;
return 0;
}
auto限制
struct Foo
{
auto value = 0; //error: auto不能用于非静态成员变量
static const int num = 10; //OK: num -> static const int;
};
int main()
{
int ar[10]={0};
auto br = ar; //ok br->int*
auto cr[10] = ar // error : auto 无法定义数组
auto dr[5]={1,2,3,4,5}; // error : auto 无法定义数组
}
版权声明:本文为kb1122333原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。