[问题] auto用在const变量以及字面值

楼主: RealJack   2015-01-12 13:17:31
各位好,
在C++11的新标准auto可用来自动推断变量的type
请看以下范例:
const int ci=1;
auto &g=ci; //g的type为const int&
const auto &h=2; //要自行加上const
我的疑问是为何第二行编译器会帮我们自动推断出const
第三行却一定要自行加上const
是有什们原因吗?
作者: ACMANIAC (請肥宅救救肥宅)   2015-01-12 13:56:00
假设会自动加上 const,那你要怎么写没有 const 的变量?第二个能自动推断,是因为它 ref 的对象是个变量名称,所以 g 就是个别名 (alias) 而已。
楼主: RealJack   2015-01-12 14:08:00
可是第二行不加const会error,编译器为何不顺便加上?你讲的情况应该是非引用, auto i=ci; const auto j=ci;此时i和j都是top level const,可忽略初始值的const属性所以可自行决定是否要加const应该是说h算是引用还是变量呢? h看起来不像别名
作者: bibo9901 (function(){})()   2015-01-12 16:03:00
temporary 只能用 const reference不然 2 很可能跟本不在内存里面, 如何参考?
楼主: RealJack   2015-01-12 16:37:00
回楼上,编译器为何不帮忙加const? 第二行却自动加?
作者: uranusjr (←這人是超級笨蛋)   2015-01-12 22:18:00
看了半天还是不懂你的问题在哪里, 如果编译器会自动加,当你真的想要 h 是 int & 时要怎么写?唔, 好像懂了, 你的意思是为什么编译器没有帮常数做特例这大概只能说因为没有规定他要帮你这么做吧
楼主: RealJack   2015-01-12 23:43:00
楼上,第3行是非加const不可,为何编译器不顺便加?第二行也是非加const不可,这时编译器就自动帮忙加const为我是好奇为何会有差别待遇
作者: firose (guest也是也是也是也是也)   2015-01-13 00:06:00
可能是左值、右值的关系?右值要明确写?感觉应该要自动推 @@应该左值不给推,要 auto&& 才抓得到,auto& 就比照 T&  右
作者: carylorrk (carylorrk)   2015-01-14 05:45:00
2 是 int 不是 const int。that's all.

Links booklink

Contact Us: admin [ a t ] ucptt.com