当我们需要使用“&”时什么时候不呢? 例如,在下面,两个for循环产生相同的结果。
std::vector< Product* > itemByColor = pF.by_color( vecProds, Color::Red );
for( auto i : itemByColor )
{
std::cout << " product name <<" << i->name<< std::endl;
}
和
for( auto& i : itemByColor )
{
std::cout << " product name <<" << i->name<< std::endl;
}
答案 0 :(得分:0)
或多或少与您决定键入std::string
或(const
)std::string&
相同。也就是说,您是要复制对象还是要引用它。
std::vector<int> my_vector{ 1, 2, 3, 4, 5 };
int copy = my_vector[ 0 ];
int& reference = my_vector[ 0 ];
++copy;
std::cerr << my_vector[ 0 ] << '\n'; // Outputs '1', since the copy was incremented, not the original object itself
++reference;
std::cerr << my_vector[ 0 ] << '\n'; // Outputs '2', since a reference to the original object was incremented
// For each 'n' in 'my_vector', taken as a copy
for( auto n : my_vector )
{
// The copy ('n') is modified, but the original remains unaffected
n = 123;
}
// For each 'n' in 'my_vector', taken as a reference
for( auto& n : my_vector )
{
// The original is incremented by 42, since 'n' is a reference to it
n += 42;
}
// At this point, 'my_vector' contains '{ 44, 44, 45, 46, 47 }'