C++11 Gamme à base de boucle d'efficacité “auto const &i” et “auto i”

En C++11, je peux effectuer une itération sur certains conteneurs de la sorte:

for(auto i : vec){
   std::cout << i << std::endl;
}

Mais je sais que cette inutilement - inutilement, puisque je n'ai besoin de impression les valeurs de vec - fait une copie de (MODIFIER: chaque élément de) vec, donc à la place je pourrais faire:

for(auto &i : vec){
   std::cout << i << std::endl;
}

Mais je veux faire en sorte que les valeurs de vec ne sont jamais modifiés et de respecter const-correctness, alors je peux le faire:

for(const auto &i : vec){
   std::cout << i << std::endl;
}

Donc ma question est: Si j'ai seulement besoin de look les valeurs de certains conteneur, ne serait pas la dernière boucle (const auto &i) toujours être préféré en raison de l'augmentation de la effieciency de ne pas avoir une copie supplémentaire du (MODIFIER: chaque élément de) vec?

J'ai un programme que je suis en plein développement dans lequel j'envisage de procéder à ce changement tout au long, car l'efficacité est essentielle en elle (la raison pour laquelle je suis à l'aide de C++ à l'endroit de poing).

  • Oui, si vous avez seulement besoin d'un accès en lecture à un argument, il devrait être à travers auto const& pour éviter une inutile copie.
  • Le mot clé "const n'est pas de rendre votre code plus vite que...
  • for (auto i : vec) ne pas rendre une copie supplémentaire de l'ensemble de la vec, la copie de chaque élément de vec en i.
  • Je vois. Donc, à chaque nouvelle itération, la copie précédente est supprimée, droit?
  • Oui, c'est correct.
  • pas supprimés, mais qui a été détruit.

InformationsquelleAutor user2052561 | 2013-06-10