你上一个编译不过的例子不就都清楚了?
【 在 ziqin (子青|会挽雕弓如满月|西北望|射天狼) 的大作中提到: 】
: 标 题: Re: unique_ptr 和auto &&
: 发信站: 水木社区 (Thu Jul 22 15:26:29 2021), 站内
:
: 我的理解是auto是decltype的语法糖
:
: int *p=new int(1);
: const auto &q=p; // int * const q=p
: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
:
: 你这个例子不太合适,我的理解是,q这个时候是个const int*&。
:
: 更合适和常见的例子是
: std::vector<A> a_vec;
: for( const auto& elem : a_vec )
: {
: xxxx
: }
: 在这个例子里,如果用const auto elem : a_vec,编译器会把auto解释为cosnt A,所以每个elem是一个copy,而如果显示用了const auto& elem,等于告诉编译器,你这儿每个elem是一个reference。 因为&&会引发decay,所以除非你的auto类型在函数的input里,然后在代码里,又有明显的地方表示除非auto&&是个rvalue,不然编译不过,不然编译器不会认为auto&&是个rvalue.
:
: 理解不对的地方请版上各位指正。
:
:
:
: 【 在 lushan5436 的大作中提到: 】
: : o,
: : 这个auto,我很多地方容易费解。正常这个&&只能用于 右值,但auto&&却用于了左值
: : 还有类似的
: : ...................
:
: --
:
: ※ 来源:·水木社区
http://www.mysmth.net·[FROM: 122.224.174.*]
--
FROM 76.126.252.*