旧版C ++中的扩展初始化列表

时间:2014-11-26 19:28:03

标签: c++ c++11

编译时,我收到警告:

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 ++兼容?

3 个答案:

答案 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>()
    );
}