为参数创建副本或使用参考?

时间:2011-01-28 18:10:00

标签: c++

我的问题是我想返回两个字符串s1,s2的公共子字符串。显然,s1和s2是对称的。

string shortest_common( const string& s1, const string& s2 ) {

}

我想出了这个问题的三种可能的解决方案:

  • 制作s1和s2
  • 的副本
  • 或交换他们,这意味着我必须牺牲他们的常规
  • 或者最糟糕的是,重复代码!

我个人更喜欢第一种情况,因为意图是找到不改变s1或s2的最短公共字符串。所以我的问题是:在这种情况下哪个选项是理想的?

谢谢,

3 个答案:

答案 0 :(得分:2)

我会选择使用您显示的签名。如果你找到一个共同的子串,那么你不希望有副作用。当他们打电话给你的功能时,这不是人们想到的。我不希望一个名为“add_two_numbers”的函数修改其中一个数字并返回一个值。

答案 1 :(得分:0)

您可以使用递归来交换参数的含义,而无需以任何方式更改对象本身。

答案 2 :(得分:0)

我对你的实际问题有点困惑,所以我会根据标题判断。

同时执行:

void shortest_common( string& s1, const string& s2 )
{
  // real algorithm changing s1
}

inline string shortest_common( string s1, const string& s2 )
{
  shortest_common( s1, s2 );
  return s1;
}