[英]How to work with regular expressions in c++ with gcc 4.8 and without C++11 flag?
我最近發現gcc 4.8中的正則表達式支持是不完整的,它確實是在gcc 4.9中實現的(參見gcc 4.8或更早版本關於正則表達式的錯誤嗎? )。
所以,想要在我的c ++程序中使用正則表達式,我按照這些說明將我的gcc更新為4.9( https://askubuntu.com/questions/466651/how-do-i-use-the-latest-gcc-4- 9-on-ubuntu-14-04 )。
現在,當我嘗試編譯我的程序時,它說為了#include <regex>
我必須指定編譯器標志-std=c++11
,我做了,現在我遇到了新的編譯問題,我之前沒有( 'constexpr' needed for in-class initialization of static data member
)。
鑒於此,我認為現在最好堅持使用gcc 4.8並且不要在編譯中指定gnu ++ 11標志。 回到原點1。
那么,如果我不想切換到gcc 4.9,也不使用c ++ 11標記編譯器,我可以使用c ++中的正則表達式嗎? 還有另外一種方法嗎?
謝謝!
PS:實際上它是導致編譯問題的c ++ 11標志,而不是gcc的版本,對吧?
您可以安裝PCRE庫並使用它而不是C ++ 11標准正則表達式。 PCRE實際上是作為C庫/接口設計的,而不是C ++,但是編寫幾個簡單的包裝類或者只是將它用作C庫非常容易。
該錯誤很可能意味着您依賴於非標准GCC擴展來初始化非整數類型,如下所示:
struct X {
static const double d = 3.14;
};
這在C ++ 98中無效,但得到了GCC的支持。
C ++ 11標准添加了對初始化非整數類型的支持,但是你需要使用constexpr
例如
struct X {
static constexpr double d = 3.14;
};
使用-std=c++11
或-std=gnu++11
進行編譯時,不再支持舊的GCC特定擴展。 你必須使用標准的C ++ 11方式,使用constexpr
。
因此,您可以通過將其更改為constexpr
,或使其與GCC的C ++ 98擴展以及C ++ 11兼容來輕松解決錯誤:
struct X {
#if __cplusplus > 199711L
static constexpr double d = 3.14;
#else
// this is non-standard but allowed by GCC in C++98 mode
static const double d = 3.14;
#endif
};
這將允許您使用-std=c++11
進行編譯,因此您可以使用GCC 4.9的工作std::regex
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.