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