sha*_*oth 35 c++ undefined-behavior
有一些情况,C++标准将其定义为未定义的行为.例如,如果我分配new[],然后尝试释放delete(不delete[])那是未定义的行为 - 任何事情都可能发生 - 它可能会起作用,它可能会崩溃,它可能会默默地破坏某些东西并设置一个定时问题.
解释这一点很有问题,新手可能会发生任何事情.他们开始"证明""这是有效的"(因为它确实适用于他们使用的C++实现),并询问"这可能是什么问题"?我能给出什么简洁的解释会激励他们不写这样的代码?
Ale*_*eth 48
未定义意味着明确不可靠.软件应该可靠.你不应该说太多其他的话.
冰冻的池塘是未定义的行走表面的一个很好的例子.仅仅因为你跨过一次并不意味着你应该在你的纸张路线上添加快捷方式,特别是如果你计划四季.
Pét*_*rök 32
我想到了两种可能性:
你可以问他们"只是因为你可以在午夜时分在高速公路上朝相反的方向行驶并继续生存,你会经常这样做吗?"
更复杂的解决方案可能是设置不同的编译器/运行环境,以向他们展示在不同情况下它是如何失败的.
Ign*_*ams 21
"恭喜,你已经定义了编译器对该操作的行为.我希望明天上午10点之前关于世界上存在的其他200个编译器的行为的报告出现在我的桌面上.不要让人失望我现在,你的未来看起来很有希望!"
fre*_*low 14
只需引用标准.如果他们不能接受,那么他们就不是C++程序员.基督徒会否认圣经吗?;-)
1.9程序执行
本国际标准中的语义描述定义了参数化的非确定性抽象机器.[...]
抽象机的某些方面和操作在本国际标准中描述为实现定义的(例如sizeof(int)).这些构成了抽象机器的参数.每个实施应包括描述其在这些方面的特征和行为的文件.[...]
抽象机器的某些其他方面和操作在本国际标准中被描述为未指定的(例如,对函数的参数的评估顺序).在可能的情况下,本国际标准定义了一组允许的行为.这些定义了抽象机器的非确定性方面.[...]
本国际标准中将某些其他操作描述为未定义(例如,取消引用空指针的效果).[注意:本国际标准对包含未定义行为的程序的行为没有要求. - 尾注]
你不能比这更清楚.
| 归档时间: |
|
| 查看次数: |
1639 次 |
| 最近记录: |