编译时,我收到警告:
extended initializer lists only available with -std=c++11 or -std=gnu++11
以下是有问题的代码:
std::vector<std::string> command_parse(std::string command) {
std::istringstream iss(command);
std::vector<std::string> tokens;
copy(std::istream_iterator<std::string>{iss}, std::istream_iterator<std::string>{},
std::back_inserter(tokens)); //This line gets the warning
return tokens;
}
有没有办法让这段代码与旧版本的c ++兼容?
答案 0 :(得分:0)
用圆括号替换花括号:
std::copy(std::istream_iterator<std::string>(iss),
std::istream_iterator<std::string>(),
std::back_inserter(tokens));
答案 1 :(得分:0)
只需使用括号代替大括号即可用于初始值设定项。
copy( std::istream_iterator<std::string>(iss),
std::istream_iterator<std::string>(),
std::back_inserter(tokens) );
答案 2 :(得分:0)
正如其他答案所说,使用括号而不是花括号。大括号表示 uniform-initialization ,它是C ++ 11中添加的一个特性。
还可以选择直接返回向量,因为它需要构造函数的迭代器:
std::vector<std::string> command_parse(std::string command) {
return std::vector<std::string>(
std::istream_iterator<std::string>(std::istringstream(command) >> std::skipws),
std::istream_iterator<std::string>()
);
}