鉴于原型:重载函数时使用临时对象作为参数是否是一种好的做法?
void foo(int i);
void foo(int i, const std::string &s);
实现:
void foo(int i)
{
foo(i, std::string()) ;
//! ^^^^^^^^^^^^^ ^here?
// nothing more.
}
//! ^here?
void foo(int i, const std::string &s)
{
//do something
}
哪里由std::string()
创建的临时对象走出去的范围有多大?以这种方式重载函数是一种很好的做法吗?
更新:
让我解释的情况一点点。作为练习,我正在尝试编写一个类似std::vector
的类,而不使用模板。它唯一的类型是std::string
。班级正文可在another question找到。
在实现resize()
成员函数,我发现std::vector
似乎使用了两个功能:
所以我不知道我是否应该使用的,而不是单一的一个两个功能。
如果不理解预期的语义,真的不可能给出一个好的答案。如果两个'foo'都做同样的事情,给它们起同样的名字是有道理的,那么为什么只需要更少的参数就需要调用更多的东西,然后做更多的东西呢?这些东西是微不足道的(日志?)还是界面的一个可见部分,这样一个'foo'在外部就可以理解为不同于另一个? –
随着编辑,关于生命期的问题没有多大意义。 – Mat
@DavidSchwartz你好我已经更新了线程。希望它能让情况更清楚。 –