为什么C++正则表达式函数使用输出参数



根据核心准则,C++中的输出参数通常被认为是一种代码气味。然而,我们在正则表达式库中有这样的函数

template< class BidirIt,
class Alloc, class CharT, class Traits >
bool regex_match( BidirIt first, BidirIt last,
std::match_results<BidirIt,Alloc>& m,
const std::basic_regex<CharT,Traits>& e,
std::regex_constants::match_flag_type flags =
std::regex_constants::match_default );

其中CCD_ 1是输出参数。有没有具体的原因打破了这里的核心准则,而不是简单地按值返回std::match_results

也有一些例外:

  • 对于非值类型,例如继承层次结构中的类型,通过unique_ptr或shared_ptr返回对象
  • 如果一个类型的移动成本很高(例如,数组(,请考虑在空闲存储中分配它并返回一个句柄(例如,unique_ptr(,或者将它传递到要填充的非常量目标对象的引用中(用作out参数(
  • 要在内部循环中重用一个在多个函数调用中具有容量的对象(例如,std::string、std::vector(,请将其视为输入/输出参数并通过引用传递

我认为这是regxr匹配的第二种情况。

相关内容

  • 没有找到相关文章

最新更新