Enr*_*lis 7 c++ undefined-behavior language-lawyer c++20
昨天我在大卫·斯通的演讲中听到了这一点
但并没有真正关注它。
直到今天,当我观看《C++ 对象模型的量子解释》时,他开头说
在 C++20 之前,所有 C++ 程序都是未定义的。从 C++20 开始,它们可能仍然是未定义的,但至少不是出于生命周期的原因。
他在说什么?
我知道有些事情不能仅通过使用该语言中可用的内容来实现(我想std::mutex肯定不能?);我知道这显然是所有(?)编程语言中都存在的问题,例如 Haskellseq需要编译器支持。
但是有人真的告诉我我无法实施吗std::monostate?
我的观点是,有些事情可以仅通过语言工具来实现,有些事情不能。什么使得std::vector属于后一类?
在 C++11 及更高版本中还有更多。std::any、、、、、等等...您无法以完全兼容的方式实现std::optional它们std::future。std::threadstd::atomicstd::shared_ptr
大多数子系统控制器(线程API、时间API等)、容器和线程安全\线程同步组件都无法通过严格使用语言的能力来实现。并且不是必需的,它们是编译器或运行时内置功能的抽象。
未定义的行为是指任何最终用户文档中未描述或限制的行为:操作系统、语言标准或编译器的行为。这并不一定意味着灾难性的行为,而是一种没有记录的行为。
但程序的行为并不是未定义的。相反,标准
作为其副产品,定义您自己的版本std::vector将是一个 UB。编译器如何解析尝试 ODR 使用此类自定义定义的代码是未定义的。
| 归档时间: | 
 | 
| 查看次数: | 322 次 | 
| 最近记录: |