我可以将赋值的结果传递给c ++中的函数吗?

时间:2013-05-01 11:34:39

标签: c++ function variable-assignment

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

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

这样做的主要原因是使代码更小一些,更容易阅读,所以代替:

val = 2
function(val);

我明白了:

function(val = 2);

可以吗? 如果是这样,是否存在一个惯例,即由于某种原因这是一个糟糕的编码实践?

谢谢, 饲料

3 个答案:

答案 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。我已经有了这本书多年,我仍然学习新的东西来改进我的代码。