1

予想とは異なる動作が発生します(また、Microsoft C ++とも異なります)。

次のtest.cppファイルについて考えてみます。

#include <iostream>
#include <ostream>
#include <regex>

int main( void )
{
    std::regex rx( "a(b+)(c+)d" );
    std::string s( "abbbbccd" );
    std::smatch m;

    bool f = regex_match( s, m, rx );
    std::cout << std::boolalpha << f << std::endl;
    if( f ) {
        std::cout << "m[1]=" << m[1] << std::endl;
        std::cout << "m[2]=" << m[2] << std::endl;
    }

    return 0;
}

私のUbuntuOneiricボックスで、プログラムのコンパイル方法と、a.outから取得した出力に注意してください。

$ g++ -std=c++0x test.cpp
$ ./a.out
true
m[1]=abbbb
m[2]=bcc

一方、私のWindowsマシンでは、VisualStudio2010を使用して次のことを行いました。

C:> cl /EHsc test.cpp
C:> test.exe
true
m[1]=bbbb
m[2]=cc

私は専門家ではありませんが、MicrosoftVisualStudioが正解のようです。これは非常に基本的なシナリオなので、何が起こっているのだろうか。私はそれがバグだとは信じられませんし、MSとGNUの間のそのような基本的なレベルでの根本的な不一致も信じられません。構成またはコマンドラインに何かが疑われます。デフォルトのUbuntu11.10クライアントをインストールした後、g++コンパイラとヘッダーを取得しました。「apt-getinstallbuild-essentials」を使用しました。

私が見逃しているコンパイルスイッチ、またはMSとGNUの間の根本的な不一致である可能性があります

4

1 に答える 1

4

<regex>libstdc ++ではまだほとんど実装されていません:http://gcc.gnu.org/onlinedocs/libstdc++/manual/status.html#status.iso.2011

于 2012-03-21T12:55:52.350 に答える