2017-02-04 2 views
0

Когда нам нужно использовать «&», а когда нет?
, например, внизу, оба для петель дают одинаковый результат.Использование «&» с авто

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

до тех пор, как вы только * прочитать * значение, не должно быть большой разницы между копией и ссылкой – sp2danny

+0

@ sp2danny: Для низковат объектов, таких как 'int's, принимая ссылку на самом деле может ухудшить представление. – 3442

ответ

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 }' 
Смежные вопросы