我的问题是:“我可以将赋值结果传递给 c++ 中的函数吗?”
我想这样做的原因是变量具有特定类型,例如“int”,因此我将值分配给变量并将整个内容传递给以“int”作为参数的重载函数。
这样做的主要原因是让代码更小更容易阅读,所以不要:
val = 2
function(val);
我得到:
function(val = 2);
那样可以么?如果是这样,是否有约定说由于某种原因这是糟糕的编码实践?
谢谢,饲料
我的问题是:“我可以将赋值结果传递给 c++ 中的函数吗?”
我想这样做的原因是变量具有特定类型,例如“int”,因此我将值分配给变量并将整个内容传递给以“int”作为参数的重载函数。
这样做的主要原因是让代码更小更容易阅读,所以不要:
val = 2
function(val);
我得到:
function(val = 2);
那样可以么?如果是这样,是否有约定说由于某种原因这是糟糕的编码实践?
谢谢,饲料
是的
每段§ 5.17 / 1
赋值运算符 (=) 和复合赋值运算符都从右到左分组。所有这些都需要一个可修改的左值作为它们的左操作数,并返回一个指向左操作数的左值。
之后function(val = 2)
, 2
分配给val
然后val
传递给函数的值。
谈论可读性并不容易,我个人不会在我的代码中使用这种方式。
"Can I pass the result of an assignment to a function in c++?"
是的,当然我们可以做到这一点。编译器将function(val = 2)
分两步打破此语句,首先将 2 分配给val
然后使用参数 2 调用函数。因此,前两种方法比第二种方法更清晰易读。
C++ 确实允许这样做,但如果我是你,我不会这样做。
并非 c++ 允许您做的所有事情都是一个好主意。一个好的程序员必须考虑两件事:可读性和可维护性。一位博主(我不记得是谁)曾经说过,程序员不是为计算机编程,他们应该为程序员编程。
这意味着您应该尝试使内容尽可能易于阅读。将多行浓缩为一行实际上会降低可读性,因为读者必须停下来思考不止一件事,他们必须分析浓缩的陈述而不是仅仅阅读它。
您想要做的也可以隐藏由拼写错误造成的错误。比如说,你输入了
function(val == 2)
因为失误。编译器也会允许这样做,因为它会将 bool 转换为 int。除非他/她非常了解参数列表,否则其他读者也不会发现这个错误。
如果您对有关良好编程构造技术的提示和技巧以及建议感兴趣,我强烈推荐Code Complete 2。我已经拥有这本书多年了,我仍然学习新东西来改进我的代码。