gpt4 book ai didi

c++ - 既然其他可滥用但有用的特性已经标准化,为什么不#pragma once呢?

转载 作者:太空狗 更新时间:2023-10-29 20:39:47 25 4
gpt4 key购买 nike

非标准#pragma once几乎所有 C++ 编译器都实现了此功能,但 C++ 标准将其排除在外。

The usual explanation为什么#pragma once , 或某种语言构造来执行 #pragma once 的操作确实,已被排除在 C++ 标准之外的是硬链接(hard link)和复制的头文件要么中断 #pragma once或激发编译器启发式。很公平,启发式通常与 C++ 哲学不兼容,但关于简单的破坏:有许多有用的语言功能可以破坏,而不仅仅是 #pragma once .管理此类损坏的正常 C++ 方法是让编译器在可疑情况下发出可选警告。毕竟,C++ 的设计目的是让一个程序在希望这样做时不安全和/或不可移植。此外,#pragma once 的不安全性和/或不可移植性非常小。它只是没那么容易被滥用。

为什么是#pragma once当其他可滥用但有用的语言特性通常被包括在内时,被排除在标准之外? #pragma once 有什么特别之处吗? ?

此外,在哪里可以阅读标准委员会最近对此事的审议?是否有委员会成员或委员会追随者发表了最近的辩论摘要?

最佳答案

有几个简单的原因:

  1. 实现和指定它比通常假设的要难。实现它的论点站不住脚,因为实现通常不涉及破坏该功能的方法。
  2. 与尝试改进我们想要摆脱的东西相比,委员会的时间更合理地花在使大多数预处理器变得不必要的模块上。
  3. 对于缺少 #pragma once 有一个简单的解决方法(包括守卫),也就是说,它不被认为是一个问题。
  4. 看起来,现有的实现方式确实表现不同,这似乎是最近讨论之一的根源。当然,这意味着标准化会很好,但它会立即开始与 2 ​​发生冲突。并且讨论不会简单,因为不同的各方都希望保留各自的行为。
  5. 我没有进行太彻底的搜索,但也没有看到提案:如果没有人编写提案 [并在整个过程中游说],那么任何事情都不会标准化。也就是说,我完全希望上面给出的停止添加 #pragma once 的提议的理由有足够的多数,可以很快停止。

最近对提案邮件列表进行了讨论(有关如何注册的信息,请参见 isocpp.org;不过我目前无法访问该站点)。不过,我并没有完全遵循它。快速浏览了一下我看到了上面给出的四个原因(第四个是我浏览后添加的)。

以下是最近邮件列表讨论中的一些引用资料:

  1. Is #pragma once part of the standard?
  2. Why isn't C/C++s #pragma once standard?
  3. modules proposal

关于c++ - 既然其他可滥用但有用的特性已经标准化,为什么不#pragma once呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26574435/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com