标签:idt ror its ati baseline plain 占位符 用法 position
c++11中,auto关键字被作为类型自动推导关键字,借助于auto关键字,可对变量进行隐式的类型定义,即由编译器在编译期间根据变量的初始化语句,自动推断出该变量的类型.
1.基本用法
(1)基本用法: auto 变量名 = 初值;
1
2
3
4
|
auto a = 1; //a被推导为int类型的 auto b = new auto(2); //b被推导为int* auto const *c = &a; auto const *d = 3; |
(2)在旧语法中,auto类型变量存储于栈区,static型变量存储于静态区,二者不能同时使用,但c++11的auto关键字已不再作为存储类型指示符
1
2
|
static auto i = 4; auto int j; //error ,c++11中auto关键字已经不再作为存储类型指示符 |
(3)auto并不代表一个实际的类型声明,只是一个类型声明的占位符,使用auto声明的变量必须马上初始化,以让编译器推断出它的世纪类型,并在编译剪短将auto替换为真的类型.
1
|
auto k; //error |
2.auto同指针或引用结合使用
(1)即使不把auto声明为指针,其也可以自动推导为指针类型
1
2
3
|
int a = 0; auto *b = &a; //auto=int b==>int* auto c = &a //auto=int* c==>int* |
(2)当表达式带有引用属性时,auto会抛弃其引用属性
1
2
|
auto &d = a; //auto=int d==>int& auto e = a; //auto=int e==>int |
(3)当表达式带有CV限定,auto会抛弃其CV限定
1
2
|
auto const f = a; //auto=int f==>int const auto g = f; //auto=int g==>int |
(4)但是如果auto和引用或指针结合使用,表达式的CV限定会被保留下来
1
2
3
|
auto const &h = a; //auto=int h==>int const& auto &i = h; //auto=int const i==>cosnt & auto *j = &h; //auto=int const j==>int const* |
3.使用auto的限制
(1)auto不能用于函数的参数
1
2
|
void foo( int i){…} //error,无法推导为int i = 10 foo(10) |
(2)auto不能用于类的非静态成员变量
(3)auto不能用于模板的类型实参(模板的类型实参都是)
1
2
|
Dummy< int > d1; Dummy<auto> d2 = d1; //error |
(4)auto不能用于数组元素
1
2
|
int a[10]; auto b[10] = a; //error |
标签:idt ror its ati baseline plain 占位符 用法 position
原文地址:http://www.cnblogs.com/cotsnail/p/6156365.html