繁体   English   中英

C ++中函数参数的顺序

[英]Order of Function arguments in C++

我在阅读“ Bjarne Stroustrup的C ++样式和技术 ”常见问题时,他提到了该常见问题。i ++ + i ++的价值是什么?

在此他提到了“ ...函数参数的求值顺序未定义。” 当他指的是f(v [i],i ++)时; 例。

我知道函数参数的求值顺序是不确定的,不是不确定的,但是在这种情况下是不确定的,因为我们依赖于i的值来传递哪个v [i]或FAQ本身的错误?

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

签出线程以了解“未指定行为”和“未定义行为”之间的区别。

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

就我个人而言,我不必理会“未定义”和“未指定”之间的区别; 你知道这是什么吗? 无论哪种情况,都应删除该代码并进行射击:(请小心避免使用“ undefined”和“ unspecified”一词)

.....

您无需知道:只需避免两者。 如果有人真的想知道他们可以在C ++或C标准中查找定义(我敢打赌,C和C ++标准将在不重要的细节上存在分歧)。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM