C++ 哪一个更好,auto&&;,自动或自动常数
如果我有这样的类型C++ 哪一个更好,auto&&;,自动或自动常数,c++,c++14,C++,C++14,如果我有这样的类型 std::vector<int> const value = ... 风格2: for(auto &&v : value){ //do something } 风格3: for(auto const v : value){ //do something } 它们都保持了这种类型的恒定性 样式2是最通用的解决方案 据我所知,对于int、double等基元类型,pass-by-value优于pass-by-const-reference,
std::vector<int> const value = ...
风格2:
for(auto &&v : value){
//do something
}
风格3:
for(auto const v : value){
//do something
}
它们都保持了这种类型的恒定性
样式2是最通用的解决方案
据我所知,对于int、double等基元类型,pass-by-value优于pass-by-const-reference,因此如果我们知道向量的类型是基元类型,那么我认为样式1和样式3比样式2更好。如果这个问题听起来很愚蠢,请原谅。这取决于您的需要和您反复讨论的内容 样式1和3是图元的副本。这意味着您无法更改原始容器。对于小型类型,它在性能方面可能是有益的(在您的目标体系结构上对您自己进行基准测试),但通常只是一个不好的默认值 然后你必须决定你是否是默认的const成员之一。如果是,请选择样式3
样式2确实是最通用的,但不一定是好的。除非您想从元素进一步移动,否则对现场生成的序列进行非常量引用没有什么意义,即:
for(auto&& x : std::vector<int>{1,2,3})
{
// x = 42; ???
}
for(auto&&x:std::vector{1,2,3})
{
//x=42???
}
如果你查看C++核心指南,你就不会看到任何例子,比如<代码> Auto&&和代码>,他们建议默认使用<代码> const和< />代码,除非你要修改变量。这就是我要坚持的。
以什么方式更好呢?对于对于(auto const v:value){
你的意思是对于(const auto&v:value){
?因为const值似乎没有太多意义。我想这里也有合理的答案:它也包括const auto&
for(auto&& x : std::vector<int>{1,2,3})
{
// x = 42; ???
}