Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
未定义的行为依赖于C++中的编译器吗? 不确定行为取决于C++中的编译器吗?_C++_Compiler Construction_Undefined Behavior - Fatal编程技术网

未定义的行为依赖于C++中的编译器吗? 不确定行为取决于C++中的编译器吗?

未定义的行为依赖于C++中的编译器吗? 不确定行为取决于C++中的编译器吗?,c++,compiler-construction,undefined-behavior,C++,Compiler Construction,Undefined Behavior,每个编译器对每个问题都有自己的行为 >在C++标准中指定什么是未定义行为?< /P> 根据定义,编译器在遇到表现出未定义行为的代码时生成的代码可以是任何代码。这是为了给编译器编写者提供优化的余地 请注意,未定义的行为意味着您的程序可以执行任何操作。它不能保证它会崩溃、抛出异常或写入内存的某个区域。对于所有你知道的,它可以删除你的整个文件系统,然后取出垃圾,这将是好的,由C++标准。 远离未定义的行为 不确定行为取决于C++中的编译器吗? 对。 可以这样说: 定义良好的行为符合标准,并得到所有人的

每个编译器对每个问题都有自己的行为

>在C++标准中指定什么是未定义行为?< /P> 根据定义,编译器在遇到表现出未定义行为的代码时生成的代码可以是任何代码。这是为了给编译器编写者提供优化的余地

请注意,未定义的行为意味着您的程序可以执行任何操作。它不能保证它会崩溃、抛出异常或写入内存的某个区域。对于所有你知道的,它可以删除你的整个文件系统,然后取出垃圾,这将是好的,由C++标准。 远离未定义的行为

不确定行为取决于C++中的编译器吗? 对。 可以这样说:

定义良好的行为符合标准,并得到所有人的支持 编译器也同样出色

因此,

未定义的行为不符合标准,编译器 他们想干什么就干什么


关于未定义的行为, C++标准部分1.3.24状态:

允许的未定义行为范围从完全忽略情况到结果不可预测,到在翻译或程序执行过程中以环境特有的方式(无论是否发出诊断消息)进行行为,通过发出诊断消息来终止转换或执行


因此,是的,当出现未定义的行为时,编译器可以自由地显示他们想要的任何行为。

未定义确实意味着未定义。也就是说,任何事情都可能发生

它能依赖于编译器吗?对

所有编译器都能做同样的事情吗?对

它今天能做一件事,明天能做一件事吗?对

它能使程序崩溃吗?对

它能做我认为它应该做的事情并且看起来工作正常吗?对


任何事情都可能发生。

这可能取决于编译器、体系结构或环境。怎么说呢?对未定义就是未定义。标准允许在解除对空指针的引用的同时播放马勒的第六交响曲。投票以非建设性方式结束。解释未定义的行为只在一些非常特殊的情况下才有价值。我不确定这与优化的余地有关。也许优化不是一个正确的词。它通常用于定义标准行为会使所有体系结构难以支持或效率低下的情况。因此,为了让开发人员更容易,他们只允许他们对给定的体系结构做任何最简单/最有效的事情。很多时候,这意味着什么也不做,让程序处于可能不一致的状态。