【发布时间】:2011-07-29 08:40:23
【问题描述】:
我必须编写一个库,其中包含一个带有两个字符串参数的函数:
void foo(const std::string& arg1, const std::string& arg2);
我的库将被一些不喜欢 C++ 并且只习惯const char* 的人使用。
为了满足他们的喜好,我改变了原型:
void foo(const char* arg1, const char* arg2);
并使我的第一个版本成为一个简单的内联调用:
inline void foo(const std::string& arg1, const std::string& arg2)
{
foo(arg1.c_str(), arg2.c_str());
}
当然,多亏了std::string 构造函数,它与第一个版本的工作方式几乎相同。编写此重载只是避免在某人仅通过 const char* 的情况下实例化无用的 std::string。
但现在我想知道:这种重载真的有必要还是只是过早的优化?
另外,我觉得这有点不完整:我还应该写 void foo(const char* arg1, const std::string& arg2) 和 void foo(const std::string& arg1, const char* arg2) 重载吗?如果我有 3、4 或更多 (n) 参数怎么办?我应该写 2n 个重载吗?
简而言之,你有没有遇到过类似的情况?你做了什么选择,为什么?
谢谢。
【问题讨论】:
-
通过提供这样的重载来鼓励使用
const char*字符串实际上可以被视为一种悲观的形式,当您考虑到适当的字符串类型有时可以提供的算法优势时。
标签: c++ overloading