C++ 如何正确使用向量范围构造函数?
我想将文本文件中的所有行加载到一个C++ 如何正确使用向量范围构造函数?,c++,c++11,vector,fstream,most-vexing-parse,C++,C++11,Vector,Fstream,Most Vexing Parse,我想将文本文件中的所有行加载到一个向量您已经成为最麻烦的解析的牺牲品,编译器将您的声明视为一个函数字符串返回一个向量,包含两个参数: 名为文件的istream\u迭代器 指向不带参数并返回istream\u迭代器的函数的未命名指针 要消除烦人的解析,请在第一个参数周围使用一对额外的括号: vector<string> strings((istream_iterator<string>(file)) , istream_iterator<string>())
向量您已经成为最麻烦的解析的牺牲品,编译器将您的声明视为一个函数字符串
返回一个向量
,包含两个参数:
- 名为
文件的istream\u迭代器
- 指向不带参数并返回
istream\u迭代器的函数的未命名指针
要消除烦人的解析,请在第一个参数周围使用一对额外的括号:
vector<string> strings((istream_iterator<string>(file)) , istream_iterator<string>());
// ^ ^
注意:Clang通过-Wvexing parse
(默认情况下打开)向您发出警告。请参阅。这可能会有所帮助:找到它。我应该删除这个问题还是自己回答?尝试将至少一个迭代器声明为单独的变量,这样可以消除歧义。伙计,那真的很糟糕。如果你有一个好答案,那就去吧。
error: no matching function for call to ‘begin(std::vector<std::basic_string<char> > (&) (std::istream_iterator<std::basic_string<char> >, std::istream_iterator<std::basic_string<char> > (*) ()))’
for(auto s : strings)
^
vector<string> strings((istream_iterator<string>(file)) , istream_iterator<string>());
// ^ ^
vector<string> strings{istream_iterator<string>(file) , istream_iterator<string>()};
// ^ ^