以下代码在两个系统上产生不同的输出,这两个系统都是英特尔Linux上的某种g ++ 4.9.2:
Ubuntu:gcc版本4.9.2(Ubuntu 4.9.2-0ubuntu1~14.04); 输出:2
ArchLinux:gcc版本4.9.2 20150204(预发布)(GCC); 输出:1
编译是例如 g ++ -std = c ++ 11 foo.cpp -o foo 。更改优化级别不会影响任一计算机上的结果。这里有某种未定义的行为,我没有看到或者某处有编译器/库错误吗?
#include <iostream>
#include <iterator>
#include <regex>
int main() {
std::string string = "1 2 3";
std::regex space_re("\\s+"); // whitespace
std::sregex_token_iterator tokens(string.begin(), string.end(), space_re, -1);
std::cout << ((tokens++)->str());
}