C ++中的函数参数顺序

时间:2011-01-23 06:43:51

标签: c++ parameters evaluation

我正在阅读“ Bjarne Stroustrup的C ++风格和技巧”常见问题,他提到了这个FAQ What's the value of i++ + i++?

在这里他提到“......函数参数的评估顺序是未定义的。”当他提到f(v [i],i ++);示例

我知道函数参数的评估顺序是未指定未定义但在这种情况下它是未定义的,因为我们依赖于i的值以便哪个v [i]到在FAQ本身中传递或出错?

2 个答案:

答案 0 :(得分:4)

函数参数的评估顺序未指定,但表达式的行为未定义。 Bjarne刚搞错了。 : - )

查看this主题以了解未指定行为与未定义行为之间的区别。

我曾经问过Bjarne unspecifiedundefined之间的区别,这是他的答复..

  

就个人而言,我并不打扰“未定义”和“未指定”之间的区别;你知道这是什么吗?在任何一种情况下都应该取出并拍摄该代码:(小心避免使用“未定义”和“未指定”字样)

     

.....

     

你不需要知道:只要避免两者。如果有人真的想知道他们可以在C ++或C标准中查找定义(我敢打赌C和C ++标准会对不重要的细节产生不同意见。)

答案 1 :(得分:0)

我认为我们在语义上迷失了。规范是直接或省略的定义。许多未指定的行为留给允许通过实现定义的行为进行优化,导致未定义的行为,至少如果您将代码移动到不同的编译器或硬件,因此您的代码失去了通用性,并且它可能也失去了清晰度和简单性。就像Brian Kernighan所说的那样,试图利用潜在的“副作用”手段的代码通常不是好的风格。但有人看到Bjarne Stroustrup指出“错误”,这很有趣。 :)