Lorsque vous essayez de compiler les éléments suivants:C++ erreur de compilation en utilisant la chaîne et istream_iterator
#include <string>
#include <iterator>
#include <iostream>
using namespace std;
int main() {
string s(istream_iterator<char>(cin), istream_iterator<char>());
return s.size();
}
g ++ 4.4.1 me donne:
main.cc: In function ‘int main()’:
main.cc:6: error: request for member ‘size’ in ‘s’, which is of non-class type ‘std::string(std::istream_iterator<char, char, std::char_traits<char>, int>, std::istream_iterator<char, char, std::char_traits<char>, int> (*)())’
Selon libstdc++ docs, la chaîne a une cteur qui prend commencer/fin de la paire d'itérateurs. Pourquoi ai-je cette erreur, alors?
Ou: string s = chaîne (istream_iterator (cin), istream_iterator ()); –
Je préfère aussi l'approche de Nate Kohl, ce n'est pas très coûteux (en terme de frappe) et la copie est probablement optimisée de toute façon. –
@ Mattieu M., si vous regardez la déclaration de Herb Sutter, je pense que c'est en fait moins de frappe puisque vous n'avez pas besoin de répéter le passe-partout "istream_iterator". Ces variables sont probablement aussi optimisées, et Herb préfère "parce que c'est beaucoup plus facile à obtenir, c'est compréhensible même pour les compilateurs les plus faibles, et cela rend le code plus clair à lire pour démarrer". –