2013-05-01 66 views
4

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

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

主要理由这样做是为了使代码有点小,更易于阅读,所以不是:

val = 2 
function(val); 

我得到:

function(val = 2); 

可以吗? 如果是这样,是否有一个约定,说这是不好的编码习惯出于某种原因?

谢谢, 饲料

+2

“更小”我可以看到。 “更容易阅读”我不明白。不要试图变得聪明,简单。先分配,然后调用该函数。这绝对不是惯用的C++代码,也不推荐。 – 2013-05-01 11:50:42

+1

如果我看到'function(val = 2);'我的第一印象可能是你写了'function(val == 2);',即传递一个布尔值。你的第一种方法显然更好。 – john 2013-05-01 11:55:25

+0

这两个有效的:) :)我没有考虑它将如何看待下一个用户:o – 2013-05-01 12:01:14

回答

4

每一段§ 5.17/1

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

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

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

+0

谢谢你的回答:),我不明白关于任务链的最后一部分.... – 2013-05-01 11:53:12

+0

表达式'a = b = c'被评估为'a =(b = c)'。 'b = c'将把'c'分配给'b',然后产生'b'作为结果。然后将其分配给'a',从而产生'a'结果。您可以将任何表达式(希望我不会偏离该术语确切含义的窗口太远)转换为函数,包括包含赋值的函数。请注意,在用户定义类型上使用重载运算符时,可以中断分配产生左侧结果的规则。 – 2013-05-01 12:17:17

+0

非常感谢:) – 2013-05-01 12:21:10

1
"Can I pass the result of an assignment to a function in c++?" 

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

+1

实际上,这个调用将使用'val'而不是'2'。这在调用'void function(int&param)'时很重要 - 你不能修改2,但你可以修改'val'。 – MSalters 2013-05-02 12:39:34

+0

函数将被调用val是2它不是通过引用其值的调用引用的调用。 – birubisht 2013-05-03 03:17:46

+0

为什么你认为这是一个价值的呼叫?此外,还有其他一些可以注意到差异的情况。例如。当'function'采用另一种类型,并且需要转换时,'val'将被转换。 – MSalters 2013-05-03 09:12:08

1

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

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

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

你想做什么也可以隐藏由错别字创建的错误。比如说,你输入了

function(val == 2) 

错误。编译器也会允许这样做,因为它会将bool转换为int。另一位读者也不会接受这个错误,除非他/她很好地知道参数列表。

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

+0

感谢那个RobbieE。对我来说有点额外的信息:)我也会看看这本书。 – 2013-05-28 11:11:17

相关问题