очень простой сценарий регулярных выражений работает иначе, чем я ожидал на libstdc ++ - v3 - PullRequest
1 голос
/ 21 марта 2012

Я получаю поведение, отличное от моего ожидания (и также отличающееся от 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;
}

На моем Ubuntu Oneiric box, обратите внимание, как я компилирую программу, и обратите внимание на вывод, который я получаю от a.out:

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

С другой стороны, на моем компьютере с Windows, используя Visual Studio 2010, я имею:

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

Я не эксперт, но Microsoft Visual Studio, кажется, правильный ответ.Это очень простой сценарий, поэтому мне интересно, что происходит.Я не могу поверить, что это ошибка, и я не могу поверить, что это фундаментальное разногласие между MS и GNU на таком базовом уровне.Я подозреваю что-то в моей конфигурации или в моей командной строке.Я получил свой компилятор и заголовки g ++ после установки клиента Ubuntu 11.10 по умолчанию и 'apt-get install build-essentials'.

Возможно, это пропущенный мной параметр компиляции или фундаментальное несогласие между MS иGNU

1 Ответ

4 голосов
/ 21 марта 2012

<regex> все еще в значительной степени не реализовано в libstdc ++: http://gcc.gnu.org/onlinedocs/libstdc++/manual/status.html#status.iso.2011

...