为什么这个参数在regex_match的原型中排序

Why this argument order in the prototypes of regex_match?

本文关键字:match 原型 排序 regex 参数 为什么      更新时间:2023-10-16

以下是std::tr1::regex_match 的6个原型的简化

regex_match(iterator1, iterator2, match_results&, regex&, flags = some_default);
regex_match(iterator1, iterator2,                 regex&, flags = some_default);
regex_match(Elem*,                match_results&, regex&, flags = some_default);
regex_match(Elem*,                                regex&, flags = some_default);
regex_match(string,               match_results&, regex&, flags = some_default);
regex_match(string,                               regex&, flags = some_default);

我想知道为什么原型是这样设计的:

  • 似乎match_resultsflags都是可选的,但您应该能够提供其中一个。为什么不把match_results &参数移到flags参数旁边呢
  • regex &论点作为主要论点似乎更直观

有人能解释一下这些原型背后的原理吗?

谢谢。

我唯一能想到的就是与算法库保持某种风格上的一致性。如果你认为match_results是某种输出迭代器,那么它看起来有点像copy等,前面有一个迭代器范围,后面有一个输出迭代程序,后面有谓词。不存储match_results的选项将这些结果转换为谓词,如any_of等。

对于图书馆中的一致性,有一些话要说。

这是我的猜测。

我想我同意你的看法。你的建议更有意义。

至于"为什么选择这样",没有客观的答案;我肯定找不到明显的技术原因。

我会把它归结为委员会的设计。