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作为返回值推导返回值类型
templateT 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< 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 无法定义数组 }



