所以我一直在探索愚蠢——Facebook 的开源库,他们的大多数实用函数都使用 cstrings 而不是字符串。他们为什么这样做呢?这些示例传入对 std::string 的引用,并将其隐式转换为 cstring。这是他们的一个示例函数,我希望这个问题能够重点关注:
函数调用方式:
// Multiple arguments are okay, too. Just put the pointer to string at the end.
toAppend(" is ", 2, " point ", 5, &str);
内部Conv.h
/**
* Everything implicitly convertible to const char* gets appended.
*/
template <class Tgt, class Src>
typename std::enable_if<
std::is_convertible<Src, const char*>::value
&& detail::IsSomeString<Tgt>::value>::type
toAppend(Src value, Tgt * result) {
// Treat null pointers like an empty string, as in:
// operator<<(std::ostream&, const char*).
const char* c = value;
if (c) {
result->append(value);
}
}
函数什么时候应该使用 cstrings 而不是字符串?他们为什么不编写函数来通过引用获取 std::string ,因此可以像这样调用函数:
toAppend(" is ", 2, " point ", 5, str);
我唯一的猜测是为了提高效率,但是将 std::string 转换为 cstring 是否比传递 std::string 的引用更有效?也许对 cstring 的实际操作比调用 std::string 成员函数更快?或者,如果他们只有一个 cstring 开头,也许他们可以调用该函数?嗯