假设我们有一个结构:
struct S{ int _i = 1; };
我想编写一个函数来更新 的实例S
,如下所示:
void update(S& s) { s._i += 1; }
我通常更喜欢返回值,而不是通过引用传递参数并更改它。像这样的东西:
S update(S s)
{
S ret = std::move(s);
ret._i += 1;
return ret;
}
然后我可以像这样调用最后一个函数(以防我想要以前和更新实例的副本):
S s{};
S u = update(s);
或者像这样(如果我只对保持更新的值感兴趣):
S s{};
s = update(std::move(s)); // is this legal?
所以,我s
进入update
函数的参数,并在赋值(最后一行)处取回它。这合法吗?除此之外,这只是愚蠢的,我应该采用第一个解决方案吗?