第3 行代码中,auto 被推导为 int* 类型,前边的例子也已经演示过了。 第4 行代码中,r1 为 int & 类型,auto 被推导为 int 类型。 第5 行代码是需要重点说明的,r1 本来是 int& 类型,但是 auto 却被推导为 int 类型,这表明当右边的表达式是一个引用类型时,auto 会把引用抛弃,直接推导出它的原始类型。
auto = int&, yy = int &, 出现了引用折叠,系统帮助我们处理掉了auto&& a_x2 = x2;//x2是左值,auto = int &, a_x2 = const int &auto&& a_x3 =100;//100是右值,auto = int, a_x3
n2 赋值成功,说明不带 const,也就是 const 被 auto 抛弃了,这验证了 auto 的第一条推导规则。p2 赋值失败,说明是带 const 的,也就是 const 没有被 auto 抛弃,这验证了 auto 的第二条推导规则。 n3 和 p3 都赋值失败,说明 decltype 不会去掉表达式的 const 属性。 对引用的处理 当表达式的类型为引用时,...
decltype(n + m) c = 0; //n+m 得到一个右值,符合推导规则一,所以推导结果为 int decltype(n = n + m) d = c; //n=n+m 得到一个左值,符号推导规则三,所以推导结果为 int& 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 上面我们知道auto不能...
autok = add(i, j);// i和j自动提升为int64_t类型,k为int64_t类型 从上能看出来,C++里的类型推导相对简单,只能根据右边的初始化值的类型推导左边的变量的类型,如果没有右边的表达式没法推导左边的变量类型。这区别于某些编程语言,如Haskell,能根据变量的使用方式推导出变...
3.auto的推导规则 总结 一、auto是什么 auto是一个C/C++语言存储类型,仅在语句块内部使用,初始化可为任何表达式,其特点是当执行流程进入该语句块的时候初始化可为任何表达式。C语言中提供了存储说明符auto、register、extern、static说明的四种存储类别。四种存储类别说明符有两种存储期:自动存储期和静态存储期。其中...
autob4 =10, b5 =20.0, b6 ='a';//错误,没有推导为同一类型 使用auto关键字做类型自动推导时,依次施加一下规则: 如果初始化表达式是引用,则去除引用语义。 inta =10; int&b = a; autoc = b;//c的类型为int而非int&(去除引用) auto&d = b;//此时c的类型才为int& ...
a) 推导规则和条款1一样,也分三种情况,重点是第二种 b) 对于{}要当心,会在初始化和初始化列表产生歧义 3. 条款3,理解decltype i. auto f() ->decltype(std::forward<>()) ii. 和decltype对应的return 不要加括号 iii. Decltyp对于左值表达式,总是T& ...
以下几行在 c++ 中是等价的: auto i = 10; int i = 10; 但是,您应该记住,在 c++ 中, auto 变量的正确类型是使用函数调用的模板参数推导规则确定的。 原文由 SingerOfTheFall 发布,翻译遵循 CC BY-SA 3.0 许可协议 有用 回复 撰写回答 你尚未登录,登录后可以 和开发者交流问题的细节 关注并接收问题...