我最近的代码审核收到了以下评论:
尽可能避免使用运算符重载:如果使用 为清晰起见,std :: string使用.append()和.assign()而不是+和=
避免传递值或引用,而是使用[C style]指针
这不是我第一次遇到这种特殊审稿人的这种废话。
与动物农场一样,有些人比其他人更平等。如何让老板知道他的宠物在同行评审中没有价值?
引用最佳实践的章节和经文是答案的一部分,但我需要的不仅仅是技术原因(不依赖于广告同性恋攻击,可能会令人满意)。建议表示赞赏。
答案 0 :(得分:3)
问题的两个部分实际上都有客观原因,所以我不同意接近的选票。
对于第一个,std::sort
(通过std::less
)假设您已超载operator<
。 std::ostream
假设您重载了自由函数operator<<(std::ostream&, Foo)
。 std::accumulate
假设operator+
等等。简而言之,C ++标准本身假定您将使用运算符重载。
在传递值(T, T&, T&& and T*
)的4种方法中,最后一种是最差的。它打破了移动语义,临时性,增加了内存泄漏的风险(模糊的语义),并且再次与C ++标准中的假设不兼容。例如。复制构造函数无法获取T*
。
答案 1 :(得分:1)
幸运的是,整个标准草案以HTML格式提供,可直接链接到每个部分。如果std::string::assign
和std::string::operator=
完全相同,那将是微不足道的。
basic_string& assign(const basic_string& str);
Effects: Equivalent to*this = str
basic_string& operator=(const basic_string& str);
Effects: If*this
andstr
are not the same object, modifies*this
如果我们在信中实现了这一点,它将如下所示:
basic_string& operator=(const value_type* __s) {return assign(__s);}
其中value_type
为Traits::char_type
,char
为std::string
。