【问题标题】:Is it possible to assign and return a variable simultaneously?是否可以同时分配和返回变量?
【发布时间】:2020-04-06 05:07:06
【问题描述】:

假设我这样写一个函数:

bool Ship::processHit()
{
    health--;
    return !health = sunk;
}

这会将sunk 设置为与!health 相同的值吗?

【问题讨论】:

  • 你要返回 !health 的值并一起沉没?
  • 递减后的!health是什么意思。是整数,怎么取反?
  • 分配总是从右到左。如果您希望 sunk 获得与 !health 相同的值(并返回该值),那么您需要反转分配。
  • 这个编译成功了吗?
  • 顺便说一句,在较大的语句中隐藏更改变量值的内容并不是一个特别好的做法。大多数人会喜欢将其分解为一行中的任务并在下一行返回,因为sunk 正在更改更为明显。扫return这一行很容易,看到return关键字,然后停止阅读。

标签: c++ function oop


【解决方案1】:
bool Ship::processHit()
{
    health--;
    return !health = sunk;
}

您不能这样做(假设health 不是具有必要运算符重载的用户定义数据类型的实例)。

这个集合会下降到与 !health 相同的值吗?

不,您实际上是在做相反的事情并招致更多错误。 !health 不是左值,那么您将 sunk 分配给什么!?

是否可以同时赋值和返回?

是的

替换return !health = sunk;

return sunk = !health;

【讨论】:

  • 你说的很好。也可能希望鼓励不要在 return 语句中进行赋值,并将return sunk = !health 分成两个语句,sunk = !health; return sunk;。在提供相同的净效果的同时,在较大的语句中进行赋值会使代码更难阅读,更容易出错,并且在有人维护代码时更容易中断。
  • @Peter 是的,我同意。这只是一个简短的是/否类型的答案:P 您的评论增加了它的价值 :)
猜你喜欢
  • 1970-01-01
  • 2013-10-26
  • 1970-01-01
  • 2022-09-24
  • 1970-01-01
  • 2013-08-25
  • 1970-01-01
  • 2016-04-24
  • 1970-01-01
相关资源
最近更新 更多