gpt4 book ai didi

c++ - ‘multiline’不是 ‘std::__cxx11::regex’ 的成员

转载 作者:行者123 更新时间:2023-12-02 06:08:59 24 4
gpt4 key购买 nike

我正在尝试使用以下命令编译以下 C++ 代码:

g++ -std=c++17 -o rgx rgx.cpp

#include <iostream>
#include <regex>
#include <string>
using namespace std;

int main() {
regex rgx("^([A-Z]*)$", regex::ECMAScript | regex::multiline | regex::icase);
smatch rmtch;
string str = "AbcefgH\r\nTest";
if (regex_match(str, rmtch, rgx)) {
for (size_t i = 0; i < rmtch.size(); i++) {
ssub_match smtch = rmtch[i];
string s_m = smtch.str();
cout << " submatch " << i << ": " << s_m << endl;
}
}
return 0;
};

但是出现以下编译时错误

rgx.cpp: In function ‘int main()’:
rgx.cpp:7:53: error: ‘multiline’ is not a member of ‘std::__cxx11::regex’ {aka ‘std::__cxx11::basic_regex<char>’}
7 | regex rgx("^([A-Z]*)$", regex::ECMAScript | regex::multiline | regex::icase);
g++ --version
g++ (Ubuntu 9.1.0-8ubuntu1) 9.1.0

当我指定 -std=c++17 时,为什么 g++ 使用 __cxx11::regex?

cppreference.com/w/cpp/regex/basic_regexregex::multiline 定义为 C++17 标准的一部分

最佳答案

Libstdc++ 似乎没有实现 regex::multiline

请注意,它使用 std::__cxx11::regex 的事实并不意味着您陷入过去。 __cxx11 并非严格保留给 C++11 功能。 The purpose of inline namespaces (例如__cxx11)是,如果最终一个类/结构需要以不向后兼容的方式进行更改,新程序将从新的内联命名空间中获取其定义,而旧的定义仍然适用于以下程序:之前建过。

关于c++ - ‘multiline’不是 ‘std::__cxx11::regex’ 的成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57048358/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com