5

我的问题是:“我可以将赋值结果传递给 c++ 中的函数吗?”

我想这样做的原因是变量具有特定类型,例如“int”,因此我将值分配给变量并将整个内容传递给以“int”作为参数的重载函数。

这样做的主要原因是让代码更小更容易阅读,所以不要:

val = 2
function(val);

我得到:

function(val = 2);

那样可以么?如果是这样,是否有约定说由于某种原因这是糟糕的编码实践?

谢谢,饲料

4

3 回答 3

5

是的

每段§ 5.17 / 1

赋值运算符 (=) 和复合赋值运算符都从右到左分组。所有这些都需要一个可修改的左值作为它们的左操作数,并返回一个指向左操作数的左值。

之后function(val = 2)2分配给val然后val传递给函数的值。

谈论可读性并不容易,我个人不会在我的代码中使用这种方式。

于 2013-05-01T11:43:37.043 回答
1
 "Can I pass the result of an assignment to a function in c++?"

是的,当然我们可以做到这一点。编译器将function(val = 2)分两步打破此语句,首先将 2 分配给val然后使用参数 2 调用函数。因此,前两种方法比第二种方法更清晰易读。

于 2013-05-01T12:00:35.943 回答
1

C++ 确实允许这样做,但如果我是你,我不会这样做。

并非 c++ 允许您做的所有事情都是一个好主意。一个好的程序员必须考虑两件事:可读性和可维护性。一位博主(我不记得是谁)曾经说过,程序员不是为计算机编程,他们应该为程序员编程。

这意味着您应该尝试使内容尽可能易于阅读。将多行浓缩为一行实际上会降低可读性,因为读者必须停下来思考不止一件事,他们必须分析浓缩的陈述而不是仅仅阅读它。

您想要做的也可以隐藏由拼写错误造成的错误。比如说,你输入了

function(val == 2)

因为失误。编译器也会允许这样做,因为它会将 bool 转换为 int。除非他/她非常了解参数列表,否则其他读者也不会发现这个错误。

如果您对有关良好编程构造技术的提示和技巧以及建议感兴趣,我强烈推荐Code Complete 2。我已经拥有这本书多年了,我仍然学习新东西来改进我的代码。

于 2013-05-28T10:19:19.837 回答