【发布时间】:2014-01-05 08:29:13
【问题描述】:
给定原型:
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似乎在使用两个函数:
void
resize(size_type __new_size);
void
resize(size_type __new_size, const value_type& __x);
所以我想知道是否应该使用两个函数而不是一个函数。
【问题讨论】:
-
如果不理解预期的语义,真的不可能给出一个好的答案。如果两个
foo都做了同样的事情,给它们起相同的名字是有意义的,为什么需要更少参数的那个需要调用那个需要更多然后做更多事情的那个?这些东西是微不足道的(日志记录?)还是界面的可见部分,以至于一个foo做了一些外部理解为与另一个不同的事情? -
随着编辑,关于生命周期的问题没有多大意义。
-
@DavidSchwartz 嗨,我已经更新了帖子。希望它能让情况更清楚。
标签: c++ object-lifetime