百科问答小站 logo
百科问答小站 font logo



C++中 unsigned t = 2147483647 + 1 + 1; 是 UB 还是 ID? 第1页

  

user avatar   pansz 网友的相关建议: 
      

UB 跟 ID 的定义其实几乎是一致的。所以可以认为 UB 就是 ID。没有必要区分 UB 跟 ID。

UB 的定义是:可以这么做,但这么做的后果不确定,不同编译器实现可以产生不同的结果

ID 的定义是:可以这么做,但这么做的后果不确定,不同编译器实现可以产生不同的结果


那么,UB 跟 ID 的区别是什么呢?区别是,对于 ID,虽然允许不同编译器产生不同的编译结果,但编译器自身会撰写文档明确描述出这个结果。而对于 UB,编译器可以自行选择产生某个特定的结果,并且这个结果编译器可以不必在文档中描述出来。

共同点则是:无论 UB 还是 ID,C++ 标准都不会规定他们应该产生什么结果。


所以, UB 跟 ID 都是不确定后果,都是编译器相关。区别仅仅在于 ID 的情况编译器明确使用文档撰写了结果。如果编译器修改了某个ID行为的结果,那么必须更新该编译器的文档,但如果编译器修改了某个UB行为的编译结果,不必更新该编译器的文档。


现实中,如果你已经依赖某个编译器试出了结果的话,只要不换编译器,那么结果就是稳定的。在你不换编译器,不修改编译参数的前提下,UB跟ID并无本质区别




  

相关话题

  对容器类做改变的设计是否存在天生的错误? 
  这个如此诡异的C语言「怪事」是怎么回事? 
  为什么现在招聘程序员大多要求 Java / C / C++ 技能,而 C# / .NET 不受青睐? 
  如何以最小的改动尽量不改变已有代码的情况下适应不断变更的需求? 
  性能最强的编程语言是什么? 
  如何理解 C++ 中这两个结构体的大小(size)? 
  C 与 C++ 的真正区别在哪里? 
  C/C++中,设计的时候字符/字符串为什么要加引号? 
  c++怎么在1到n这些数中随机产生k(k<n)个?当然,k个数互不相等。有什么比较好的写法吗? 
  为什么说 C/C++ 不适合做 Web 开发? 

前一个讨论
如何看待男方月薪一万出头,相亲时被月薪只有3000的女孩嫌弃?
下一个讨论
2022 春晚的魔术《迎春纳福》的解法是什么?怎么做到的?





© 2025-03-28 - tinynew.org. All Rights Reserved.
© 2025-03-28 - tinynew.org. 保留所有权利