簡體   English   中英

如何使用gcc 4.8和沒有C ++ 11標志的c ++中使用正則表達式?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM