2

我不明白这个。GCC 应该支持但根据他们的 http://gcc.gnu.org/onlinedocs/libstdc++/manual/status.html#status.iso.tr1

状态页面“不支持 7 个正则表达式”。

但随后在“28 正则表达式” - 它们被检查为受支持

http://gcc.gnu.org/onlinedocs/libstdc++/manual/status.html#status.iso.2011

您能否解释一下什么是实际标准,什么不是?

4

2 回答 2

7

GCC 4.9 确实支持 C++11<regex>功能,但不支持 tr1 版本。请注意,区别在于后者的部分(全部?)存在于tr1::命名空间中,而 C++11<regex>存在于命名空间std中。当 C++11 已经发布了一段时间后,倒退并添加对 tr1 的支持没有多大意义。

于 2014-05-05T15:26:19.750 回答
4

可以从 GCC 4.9 发行说明中找到以下信息:

“C++ 前端已添加对各种 C++14 添加的支持,在标准 C++ 库方面,最重要的添加是对 C++11 正则表达式的支持

如果你想安装最新的 GCC4.9 版本自己尝试,你可以点击下面的 SO 链接:

如何编译和运行 GCC 4.9.x?

这是使用 gcc4.9 编译并随后运行的示例程序。

//Sample Program
#include <regex>
#include <iostream>
using namespace std;

int main() {
    regex  reg("[0-9]+");
    if (regex_match("123000", reg)) {
        cout << "It's a match!" <<endl;
    }
 return 0;
}
$g++ -std=c++11 foo.cpp -o foo
$ g++ -v
Using built-in specs.
COLLECT_GCC=/home/mantosh/gcc-4.9.0/bin/g++
COLLECT_LTO_WRAPPER=/home/mantosh/gcc-4.9.0/libexec/gcc/x86_64-unknown-linux-gnu/4.9.0/lto-wrapper
Target: x86_64-unknown-linux-gnu
Configured with: /home/mantosh/objdir/../gcc-4.9.0/configure --disable-multilib --prefix=/home/mantosh/gcc-4.9.0
Thread model: posix
gcc version 4.9.0 (GCC)
$ ./foo
It's a match!
于 2014-05-05T17:56:50.853 回答