Регулярные выражения в C++ в STL
есть ли собственная библиотека в STL, которая тестируется и работает без каких-либо дополнительных параметров компилятора?
Я пытался использовать <regex>
, но компилятор выводит это:
в файле, включенном из /usr/include/c++/4.3 / regex:40, из main.cpp: 5: в /usr/включать/с++/4.3/C++и 0x_warning.h: 36: 2: error: #error этот файл требует поддержки компилятора и библиотеки для предстоящего стандарта ISO C++, C++0x. Эта поддержка в настоящее время является экспериментальной и должна быть включена с помощью-std=c++0x или-std=gnu++0x параметр компилятора.
3 ответов
G++ 4.3 (и, предположительно, более поздние версии) просто заботится о файлах заголовков для максимального соответствия стандартам.
если вы программируете на C++98 (текущий стандарт, который был вокруг в течение некоторого времени), то поддержка регулярных выражений была добавлена в tech report 1, и файлы заголовков находятся в специальном tr1
каталог, а содержимое находится в специальном пространстве имен std::tr1
.
в новом стандарте C++0x поддержка регулярных выражений был объединен в стандартную библиотеку, поэтому его можно найти в заголовке regex
и пространство имен std
.
G++ гарантирует, что вы используете правильную версию для --std=
версия, которую вы указали в командной строке, хотя внутренне они являются одной и той же реализацией.
таким образом, чтобы регулярное выражение работало без переключения на --std=c++0x
, просто
#include <tr1/regex>
Я уверен, что поддержка регулярных выражений была добавлена в C++0x, поэтому до тех пор нет STL-вещей, которые ее поддерживают. Если вы не хотите использовать c++0x, вы можете использовать Boost вместо этого, но это не в STL.
вы можете попробовать использовать Boost.Regex вместо заголовков C++0x.
Кроме того, STL-это не то же самое, что стандартная библиотека. Раньше это означало "стандартная библиотека шаблонов", когда это было предложение SGI. Стандартная библиотека не приняла все в STL (канат и слист) и охватывает гораздо больше Земли, чем STL (iostreams, все заголовки tr1, tr2 и c++0x).