undefined-behavior相关内容

“未定义的行为”扩展到编译时?

我们都听说过警告,如果您在C或C ++中调用未定义的行为,则任何东西都可能发生。 这是否限制为任何运行时行为,还是包括任何编译时行为?特别是,编译器在遇到调用未定义行为的构造时,允许拒绝代码(在标准中没有其他要求这样做),甚至崩溃? 解决方案 “您已经忽略了实际的定义并专注于注释,标准强加 / em>。“ - @ R.MartinhoFernandes 上述讯息由指定使用者 ..
发布时间:2016-10-23 12:02:43 C/C++开发

它是明确定义的行为退出程序之前main?

这绝对可以在 main 调用之前执行代码,如 但是,什么都不是,你可以打印任何东西在前进入主要功能“>这个问题。如果在前置主代码中,程序被告知要通过 std :: exit 或 std :: abort ?由于 main 被定义为程序的开始,在开始之前退出会有什么后果? 在每个部分打印,我得到以下结果: 格式: 部分:输出 主: main Init(在main之 ..
发布时间:2016-10-23 11:57:14 C/C++开发

constexpr未定义的行为

我一直在尝试 constexpr 。在我的测试编译器(g ++ 4.6),这不能编译带有超出访问的错误。是否需要编译器 在编译时发现这一点? include constexpr const char * str =“hi”; constexpr int fail(){ return str [1000] //方式结束! } template ..
发布时间:2016-10-23 11:19:31 C/C++开发

我可以新的[],然后转换指针,然后删除[]安全与内置类型在C + +?

在我的代码中,我有效地如下: wchar_t * buffer = new wchar_t [size] //这里的无关代码 delete [] reinterpret_cast(buffer); 有问题的类型都是内置的,因此它们有微不足道的析构函数。在VC ++中,上面的代码工作allright - new [] 只是分配内存,然后 del ..
发布时间:2016-10-22 18:35:01 C/C++开发

是未定义的行为值得吗?

许多不好的事情发生了,并且由于未定义的行为继续发生(或不知道,任何事情都可能发生)。我理解这是为了留下一些摆动的空间为编译器优化,也许也使C ++更容易移植到不同的平台和架构。然而,由未定义的行为引起的问题似乎太大了,不能通过这些参数来证明。未定义行为的其他参数是什么?如果没有,为什么未定义的行为仍然存在? 编辑为我的问题添加一些动机: C ++ - crafty co-workers我已经 ..
发布时间:2016-10-22 18:29:12 C/C++开发

当extern声明和定义之间存在不匹配的类型时,行为是什么?

假设我有两个文件: == File1 == extern char * foo; == File2 == double foo; 这两个文件似乎编译和链接只是罚款与g ++和clang ++尽管类型不匹配。我理解它的推荐做法是将extern声明放在一个头文件中,这两个文件都包括所以File2将抛出一个重新定义错误。 我的问题是 ..
发布时间:2016-10-20 23:36:32 C/C++开发

由未定义的C ++移位运算符行为和包装“模式空间”

我对在关于未定义C ++行为的文章。 在ARM架构上,移位运算符总是表现为它们发生在256位模式空间中,而不管操作数大小 - 即模式重复或“循环”只有每256个位置。另一种思考方式是,模式以指定的位数模式256移位。然后,当然,结果只包含模式空间的最低有效位。 表特别奇怪: 给定一个32位整数值为1: + ----------------------------------- ..
发布时间:2016-10-20 22:23:41 C/C++开发

限制由未定义行为引起的混淆?

正如我从我的阅读中理解的,未定义的行为是编译时留下编译器有几个不相同的选择的结果。然而,这不意味着,如果一个人遵循严格的编码实践(如把每个任务和每个平等在一个单独的语句,适当的调试和评论),那么它不应该在寻找未定义的源的重大问题-behavior。 此外,对于出现的每个错误,如果您识别代码,您应该知道在该特定语句中可以使用什么语句,正确? 编辑:我不感兴趣的地方,你写的代码,你不是想写 ..
发布时间:2016-10-20 21:36:25 C/C++开发

通过引用抛出非常量临时值

通过非const引用在try-block中引用在栈上构造的对象,捕获它并修改它,然后通过引用另一个catch块抛出一个对象是否有什么问题? 下面是我要引用的一个简短示例。 struct EC { EC(string msg){what = msg; } string where; string what; void app(string& t){其中+ = t; } ..
发布时间:2016-10-20 08:51:32 C/C++开发

为什么这个未定义的行为?

为什么以下给定的表达式调用未定义的行为? int i = 5; i =(i,i ++,i)+ 1 此处提问 这里回答C,序列点和部分顺序 我认为同样适用于C ++这里是我在我看到这个链接之前的回应): 逗号运算符引入一个序列点(并在某种程度上约束表达式必须求值的顺序 - 右),所以: i 的两个修改 i ..
发布时间:2016-10-19 20:50:58 C/C++开发

a =(a + b) - (b = a); C ++ vs php

我一直在寻找,发现公式: a =(a + b) - (b = a)它应该交换两个变量一些情况)。但是我用C ++和php测试它们,这些给我不同的结果。 php: $ a = 10; $ b = 20; $ a =($ a + $ b) - ($ b = $ a); $ b $ d echo $ a,“”,$ b; 打印 20 10 C ++ int a = 10 ..
发布时间:2016-10-17 11:16:33 PHP