有一些情况,C++标准将其定义为未定义的行为.例如,如果我分配new[],然后尝试释放delete(不delete[])那是未定义的行为 - 任何事情都可能发生 - 它可能会起作用,它可能会崩溃,它可能会默默地破坏某些东西并设置一个定时问题.
解释这一点很有问题,新手可能会发生任何事情.他们开始"证明""这是有效的"(因为它确实适用于他们使用的C++实现),并询问"这可能是什么问题"?我能给出什么简洁的解释会激励他们不写这样的代码?
正如我从阅读中理解的那样,未定义的行为是编译器在编译时留下几个不同的替代品的结果.但是,这并不意味着如果要遵循严格的编码实践(比如将每个赋值和每个相等放在一个单独的语句中,进行适当的调试和注释)那么它在查找未定义的源代码时不会构成重大问题. -行为.
此外,对于每个出现的错误,如果您识别代码,您应该知道在该特定语句中可以使用哪些语句,对吗?
编辑:我对你编写的代码不感兴趣的地方不感兴趣.我对通过数学逻辑发声的代码无法工作的示例感兴趣.
此外,我认为"良好的编码实践"是每隔几行,适当的缩进和调试转储的强大信息性评论.