auto && decltype
程序员文章站
2024-03-23 10:31:52
...
关键字auto
1.C++03之前,auto放在变量声明之前,声明变量的存储策略,但通常省略不写
2.C++11中,auto关键字放在变量之前,作用是在声明变量的时候根据变量值的类型自动为此变量选择匹配的类型
e.g:
int a = 10;
auto au_a = a; //自动推断au_a为int型
cout << typeid(au_a).name() << endl;
3.auto使用限制
3.1. auto变量必须在定义时初始化,类似于const
auto a1 = 10;
auto b1; //error
bi = 10;
3.2. 定义在一个auto序列的变量必须推导称同一类型
auto a2 = 10, a3{20};
auto b2{10}, b3=20.0 //error
3.3. 如果初始化表达式是引用或const,则去除引用或const语义
int a{10};
int &b = a;
auto c = b; //c的类型为int not int&(去除引用)
const int a1{10};
auto b1 = a1; //b1的类型为int not const int
3.4. 如果auto关键字带&,则不去除引用或const语义
int a = 10;
int &b = a;
auto& d = b; //d的类型为int&
const int a2 = 10;
auto& b2 = a2; //b2的类型为const int
3.5. 初始化表达式为数组时,auto关键字推导类型为指针
int a3[3] = {1,2,3};
auto b3 = a3;
cout << typeid(b3).name() << endl; //输出int*(与编译器有关)
3.6. 若表达式为数组且带上&,则推导类型为数组类型
int a4[3] = {1,2,3};
auto& b4 = a4;
cout << typeid(b4).name() << endl; //输出int[3]
3.7. C++14中,auto 可以作为函数的返回值类型和参数类型
decltype关键字
用法
利用已知类型声明新变量
decltype是在编译期推导一个表达式的类型,它只做静态分析,因此它不会导致已知类型表达式执行。
decltype 主要用于泛型编程(模板)
e.g:
int fun1() {
return 10;
}
auto fun2() {
return 'a';
}
int main()
{
decltype(fun1()) x; //不会执行fun1()
decltype(fun2()) y;
return 0;
}
对解引用操作,auto会推断出原有类型,decltype推断出引用;并且auto推断是会世纪执行,decltype则不会执行,只做分析
上一篇: decltype,decltype(auto) (tcy)
下一篇: 结构体的内存对齐
推荐阅读
-
auto && decltype
-
decltype,decltype(auto) (tcy)
-
auto与decltype
-
aws ec2 auto scale 博客分类: aws awsec2scalecloudwatchalarm
-
emacs auto-complete 无效 博客分类: Accumulation emacsauto-completepopup
-
emacs & auto-complete 博客分类: 编辑器 emacsauto-complete
-
的含义
博客分类: JavaHibernate java字符串日期hibernatehbm2ddl ">
Java 字符串转换为日期,hibernate配置文件
的含义 博客分类: JavaHibernate java字符串日期hibernatehbm2ddl -
ERROR 9392 o.s.a.r.l.SimpleMessageListenerContainer : Failed to check/redeclare auto-delete queue(s)
-
width:100%;与width:auto;的区别
-
width:100%;与width:auto;的区别