“返回值优化”是否会导致未定义的行为?
-
22-09-2019 - |
题
阅读 这 一位回复者指出以下问题的维基百科文章:
我遇到了这条线
根据编译器和编译器的设置,生成的程序可能会显示以下任何输出:
这不符合未定义行为吗?我知道这篇文章说 Depending on the compiler and settings
但我只是想澄清这一点。
解决方案
没有,它不是不确定的行为。未定义的行为具有在标准的特定定义(主要是:“行为,如在使用时的错误的程序构建体或错误的数据,为此,本国际标准并没有规定的要求的可能出现”)。在这种情况下,行为是未指定的,但不是未定义的。
不同的是,与未定义行为任何任何执行使你的程序的所有行为未定义(即什么都可能发生)。有了这个特殊不确定的行为,只有一两件事情可能发生:要么拷贝构造函数执行,或者没有做
。其他提示
没有。的行为被定义为列表上的输出中的一个。未定义行为包括恶魔飞你的鼻子了。
请参阅:鼻魔鬼
要看你是什么意思的不确定。我相信其他人在此间表示 - 通过定义标准文档中使用。但我也知道,当有人说“非此即彼,我不会告诉你哪些”我认为它是不确定的行为。
这不是什么大不了的事,不过,因为它不应该导致错误。当你定义某些方法,你预计它们定义如下特别约定 - 这是一种你,编译器和谁将会使用和维护你的代码的人之间的隐性契约的
在这种情况下,你是否得到一个拷贝构造等,或优化行为,其效果有望成为同一个 - 主叫接收通缉值。如果你的拷贝构造函数是打印的“Hello World!”或具有其它不适当的副作用,所以不实施用于构造期望的行为,所以故障是用于破坏合同你的。
不隶属于 StackOverflow