根据核心准则,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匹配的第二种情况。