C++ 在正则表达式搜索中是否需要使用.str()来存储match.suffix()?

C++ 在正则表达式搜索中是否需要使用.str()来存储match.suffix()?,c++,regex,string,C++,Regex,String,我必须使用匹配结果的后缀进行正则表达式搜索。我拥有的字符串大约有一百万行,仅将其分配给临时字符串平均需要30毫秒。 如果我不使用.str(),即使这样,程序也可以正常工作,平均需要30毫秒。使用时间参考仅用于比较目的 regex_search(input, match, re); tempStr = match.suffix().str(); 如果时间(毫秒)没有显著差异,请告诉我.str()的用途 在正则表达式搜索中是否需要使用.str()来存储match.suffix() 否。match.

我必须使用匹配结果的后缀进行正则表达式搜索。我拥有的字符串大约有一百万行,仅将其分配给临时字符串平均需要30毫秒。 如果我不使用.str(),即使这样,程序也可以正常工作,平均需要30毫秒。使用时间参考仅用于比较目的

regex_search(input, match, re);
tempStr = match.suffix().str();
如果时间(毫秒)没有显著差异,请告诉我.str()的用途

在正则表达式搜索中是否需要使用.str()来存储match.suffix()

否。
match.suffix()
隐式转换为
string
,其效果相当于调用
.str()

我猜只有在存在类型推断的情况下才需要显式调用
.str()

auto match(std::regex re, std::string s) {
    std::smatch m;
    std::regex_match(s, m, re);
    // return m.suffix(); // bad: the return value is dangling
    return m.suffix().str(); // OK: copies the matched part
}

请发布用于生成程序的编译标志。如果您正在为未优化或“调试”的生成计时,则显示的计时将毫无意义。@PaulMcKenzie我正在使用visual studio,很抱歉,我不知道如何在此设置编译标志。忽略计时,您能告诉我.str()的用法吗?提前感谢。您是在计时“发布”版本还是“调试”版本?如果它是一个“调试”版本,那么停止您正在做的事情,并构建一个发布版本和时间。这对使用.str()有任何影响吗?您的意思是,或者一百万行在发布版本中不需要30毫秒?请运行发布版本。除非你这样做,否则这个问题毫无价值。这就是我要表达的观点。有很多这样的问题,其中的问题是“为什么做x慢?”,结果是问这个问题的人运行的是一个未优化的构建。一旦优化构建运行,计时就会被“纠正”,因此问题会被关闭、删除等。