阅读 一位回复者指出以下问题的维基百科文章:

C++ 复制构造函数、临时对象和复制语义

我遇到了这条线

根据编译器和编译器的设置,生成的程序可能会显示以下任何输出:

这不符合未定义行为吗?我知道这篇文章说 Depending on the compiler and settings 但我只是想澄清这一点。

有帮助吗?

解决方案

没有,它不是不确定的行为。未定义的行为具有在标准的特定定义(主要是:“行为,如在使用时的错误的程序构建体或错误的数据,为此,本国际标准并没有规定的要求的可能出现”)。在这种情况下,行为是未指定的,但不是未定义的。

不同的是,与未定义行为任何任何执行使你的程序的所有行为未定义(即什么都可能发生)。有了这个特殊不确定的行为,只有一两件事情可能发生:要么拷贝构造函数执行,或者没有做

其他提示

没有。的行为被定义为列表上的输出中的一个。未定义行为包括恶魔飞你的鼻子了。

请参阅:鼻魔鬼

未定义的行为实现定义的行为, ,这就是这里涉及的内容。

要看你是什么意思的不确定。我相信其他人在此间表示 - 通过定义标准文档中使用。但我也知道,当有人说“非此即彼,我不会告诉你哪些”我认为它是不确定的行为。

这不是什么大不了的事,不过,因为它不应该导致错误。当你定义某些方法,你预计它们定义如下特别约定 - 这是一种你,编译器和谁将会使用和维护你的代码的人之间的隐性契约的

在这种情况下,你是否得到一个拷贝构造等,或优化行为,其效果有望成为同一个 - 主叫接收通缉值。如果你的拷贝构造函数是打印的“Hello World!”或具有其它不适当的副作用,所以不实施用于构造期望的行为,所以故障是用于破坏合同你的。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top