Cha*_*han 2 c++ stl most-vexing-parse
我试图编译这段代码片段但是我遇到了编译错误:(!用Visual Studio 2010编译
#include <vector>
#include <string>
#include <sstream>
#include <iterator>
#include <iostream>
using namespace std;
int main() {
string s( "Well well on" );
istringstream in( s );
vector<string> v( istream_iterator<string>( in ), istream_iterator<string>() );
copy( v.begin(), v.end(), ostream_iterator<string>( cout, "\n" ) );
}
Run Code Online (Sandbox Code Playgroud)
错误:
Error 1 error C2228: left of '.begin' must have class/struct/union c:\visual studio 2008 projects\vector test\vector test\main.cpp 13 vector test
Error 2 error C2228: left of '.end' must have class/struct/union c:\visual studio 2008 projects\vector test\vector test\main.cpp 13 vector test
Run Code Online (Sandbox Code Playgroud)
发生了什么?矢量构造正确,我怎么能不能调用它?
最好的祝福,
我认为这
vector<string> v( istream_iterator<string>( in ), istream_iterator<string>() );
Run Code Online (Sandbox Code Playgroud)
被解析为函数声明:
vector<string> v( istream_iterator<string> in, istream_iterator<string> );
Run Code Online (Sandbox Code Playgroud)
这通常被称为"C++'最令人烦恼的解析".
我想一些额外的括号可以解决这个问题:
vector<string> v( (istream_iterator<string>(in)), (istream_iterator<string>()) );
Run Code Online (Sandbox Code Playgroud)