s3r*_*vac 15 c++ for-loop decltype auto c++14
有没有一种情况时decltype(auto)
会比一个更好的选择auto
(可能与&
,&&
或CV限定符)时,使用基于范围的for循环?换句话说,你会写下面的代码吗?
for (decltype(auto) item : range) {
// ...
}
Run Code Online (Sandbox Code Playgroud)
Yak*_*ont 10
decltype(auto)
当输入迭代器按值返回时,会生成不同的类型. auto&&
创建一个临时的rvalue引用,同时decltype(auto)
创建一个本地副本(在C++ 17中它只是命名临时,因为保证的elision更改).
这没有什么区别.在C++ 11/14中,它需要一个移动ctor(在实践中没有被调用,但需要)decltype(auto)
,但在C++ 17中却没有.在auto&&
移动ctor没有被调用,不需要.
另一个区别是类型decltype(item)
,它始终是引用auto&&
,但在临时返回输入的情况下,iteraror decltype(item)
是值类型.
就是这样.在实践中,我认为没有理由decltype(auto)
结束auto&&
.
另外,auto&
强制非右值,const auto&
强制不可变,并auto
强制复制.有理由使用auto&&
而不是那些,但这超出了这个问题的范围. decltype(auto)
最接近auto&&
,所以我比较了这两个.
归档时间: |
|
查看次数: |
832 次 |
最近记录: |