0

假设我们有一个结构:

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函数的参数,并在赋值(最后一行)处取回它。这合法吗?除此之外,这只是愚蠢的,我应该采用第一个解决方案吗?

4

0 回答 0