不允许嵌套类的前向声明的原因?

2024-01-01

Example:

// can't forward declare with class Foo::Bar

// actual class
class Foo
{
public:
    class Bar // or enum Bar
    {
    }
};

我承认当前的 C++ 标准不允许这样做,但我无法想出一个不允许这样做的充分理由,特别是对于 C++0x,我们现在可以转发声明枚举。我想反对它的一个论点是,如果我们转发声明嵌套类,而该类最终是私有的,那么它是不允许的。但这与在命名空间中向前声明一个类,然后将其声明为外部类的嵌套类没有太大不同。编译器只会给出一个错误(也许先前声明行中的错误消息与此声明不匹配)。

那么为什么真的不允许呢?

换句话说(作者 James McNellis),“为什么类 Foo::Bar; 不允许在不提供 Foo 或 Bar 定义的情况下?”

** 鉴于 C++ 标准委员会认识到通过在 C++0x 中引入枚举的前向声明来使用前向声明来减少依赖性和编译时间的好处,这肯定是同一件事的一部分,不是吗?


它不在语言中的原因很简单,就是没有人提出关于如何将其包含在语言中的好建议。功能不包括其本身,必须有人将其写下来并解释其优点并且没有(或非常小的)缺点。

不向前声明枚举的论点(enum x;)只是编译器在看到有多少值之前无法为枚举变量选择正确的大小。这个问题通过允许解决you来决定编译器(enum x : int;)。在进入标准之前,这也已被实施并证明可以正常工作。

See http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2764.pdf http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2764.pdf

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

不允许嵌套类的前向声明的原因? 的相关文章

  • UTF8/UTF16 和 Base64 在编码方面有什么区别

    In c 我们可以使用下面的类来进行编码 System Text Encoding UTF8 System Text Encoding UTF16 System Text Encoding ASCII 为什么没有System Text En
  • ROWNUM 的 OracleType 是什么

    我试图参数化所有现有的 sql 但以下代码给了我一个问题 command CommandText String Format SELECT FROM 0 WHERE ROWNUM lt maxRecords command CommandT
  • 创建 DirectoryEntry 实例以供测试使用

    我正在尝试创建 DirectoryEntry 的实例 以便可以使用它来测试将传递 DirectoryEntry 的一些代码 然而 尽管进行了很多尝试 我还是找不到实例化 DE 并初始化它的 PropertyCollection 的方法 我有
  • 自动从 C# 代码进行调试过程并读取寄存器值

    我正在寻找一种方法来读取某个地址的 edx 注册表 就像这个问题中所问的那样 读取eax寄存器 https stackoverflow com questions 16490906 read eax register 虽然我的解决方案需要用
  • Func 方法参数的首选命名约定是什么?

    我承认这个问题是主观的 但我对社区的观点感兴趣 我有一个缓存类 它采用类型的缓存加载器函数Func
  • 嵌入式系统中的malloc [重复]

    这个问题在这里已经有答案了 我正在使用嵌入式系统 该应用程序在 AT91SAMxxxx 和 cortex m3 lpc17xxx 上运行 我正在研究动态内存分配 因为它会极大地改变应用程序的外观 并给我更多的力量 我认为我唯一真正的路线是为
  • Cygwin 下使用 CMake 编译库

    我一直在尝试使用 CMake 来编译 TinyXML 作为一种迷你项目 尝试学习 CMake 作为补充 我试图将其编译成动态库并自行安装 以便它可以工作 到目前为止 我已经设法编译和安装它 但它编译成 dll 和 dll a 让它工作的唯一
  • 为什么禁止在 constexpr 函数中使用 goto?

    C 14 对你能做什么和不能做什么有规则constexpr功能 其中一些 没有asm 没有静态变量 看起来相当合理 但标准也不允许goto in constexpr功能 即使它允许其他控制流机制 这种区别背后的原因是什么 我以为我们已经过去
  • 跨多个控件共享事件处理程序

    在我用 C 编写的 Windows 窗体应用程序中 我有一堆按钮 当用户的鼠标悬停在按钮上时 我希望按钮的边框发生变化 目前我有以下多个实例 每个按钮一个副本 private void btnStopServer MouseEnter ob
  • C# 中可空类型是什么?

    当我们必须使用nullable输入 C net 任何人都可以举例说明 可空类型 何时使用可空类型 https web archive org web http broadcast oreilly com 2010 11 understand
  • 使用 Google Analytics API 在 C# 中显示信息

    我一整天都在寻找一个好的解决方案 但谷歌发展得太快了 我找不到有效的解决方案 我想做的是 我有一个 Web 应用程序 它有一个管理部分 用户需要登录才能查看信息 在本节中 我想显示来自 GA 的一些数据 例如某些特定网址的综合浏览量 因为我
  • 使用 LINQ 查找列表中特定类型的第一个元素

    使用 LINQ 和 C 在元素列表中查找特定类型的第一个项目的最短表示法是什么 var first yourCollection OfType
  • 线程、进程和 Application.Exit()

    我的应用程序由主消息循环 GUI 和线程 Task Factory 组成 在线程中我调用一些第三方应用程序var p new Process 但是当我调用Application Exit 在消息循环中 我可以看到在线程中启动的进程仍在内存中
  • .NET 选项将视频文件流式传输为网络摄像头图像

    我有兴趣开发一个应用程序 它允许我从 xml 构建视频列表 包含视频标题 持续时间等 并将该列表作为我的网络摄像头流播放 这意味着 如果我要访问 ustream tv 或在实时通讯软件上激活我的网络摄像头 我的视频播放列表将注册为我的活动网
  • C 中的位移位

    如果与有符号整数对应的位模式右移 则 1 vacant bit will be filled by the sign bit 2 vacant bit will be filled by 0 3 The outcome is impleme
  • 检查 url 是否指向文件或页面

    我们需要以下内容 如果文件确实是文件 则从 URL 下载该文件 否则 如果它是一个页面 则什么也不做 举个简单的例子 我有以下命令来下载文件 My Computer Network DownloadFile http www wired c
  • 将应用程序从 Microsoft Access 迁移到 VB 或 C#.NET

    我目前正试图说服管理层需要将我们的应用程序之一移植到 NET 该应用程序已经发展成为 Access 中的一个庞然大物 SQL 后端 拥有 700 个链接表 650 个表单 子表单 130 个模块和 850 个查询 我几乎知道这样做的所有主要
  • 作为字符串的动态属性名称

    使用 DocumentDB 创建新文档时 我想设置属性名称动态地 目前我设置SomeProperty 像这样 await client CreateDocumentAsync dbs db colls x new SomeProperty
  • 将变量分配给另一个变量,并将一个变量的更改反映到另一个变量中

    是否可以将一个变量分配给另一个变量 并且当您更改第二个变量时 更改会瀑布式下降到第一个变量 像这样 int a 0 int b a b 1 现在 b 和 a 都 1 我问这个问题的原因是因为我有 4 个要跟踪的对象 并且我使用名为 curr
  • 为什么 strtok 会导致分段错误?

    为什么下面的代码给出了Seg 最后一行有问题吗 char m ReadName printf nRead String s n m Writes OK char token token strtok m 如前所述 读取字符串打印没有问题 但

随机推荐

  • 快速而肮脏的 SQL 字符串转义

    我正在对家庭卷进行最后的润色QueryBuilder具有 postgresql 数据库的 Web 应用程序的类 它用PreparedStatement适用于所有查询 并防止 SQL 注入 然而我想要一种 快速而肮脏 的方式来表示QueryB
  • Grunt JS 复制到网络位置

    我想使用 grunt contrib copy 或任何其他 grunt 复制插件 将文件复制到网络位置 尝试如下 copy test files src Scripts dest location site Scripts 但得到 警告 无
  • 将特殊字符传递给 mailto 正文会导致 JavaScript 崩溃

    我有一个 C ASP NET 应用程序 它为某些用户配置文件信息创建一个 JavaScript 值数组 在客户端 我使用 jQuery JavaScript 读取数组并生成 mailto 链接 某些字段可以包含特殊字符 例如 这是 C 代码
  • 使用值更改清单 screenOrientation

    我正在训练通过资源以恒定值更改清单中的 screenOrientation 这是我的清单的一项活动
  • Neo4J安装-启动服务失败

    我正在尝试安装 Neo4j 1 8 但在启动服务时遇到问题 解压 zip 文件后 我直接进入 bin 文件夹并执行批处理文件 Neo4J bat install SC 创建服务成功 SC 启动服务失败 1053 服务未及时响应启动或控制请求
  • UserPrincipal.GetAuthorizationGroups() 方法出错

    我在 Web 应用程序中使用 UserPrincipal 类的 GetAuthorizationGroups 方法时遇到问题 使用以下代码 我收到 尝试检索授权组时 发生错误 5 PrincipalContext context new P
  • Mockito 测试活动

    我有一个生成事件的类 例如 public class EventSource public addEventListener EventListener listener public raiseEvent Event e listener
  • 当元素已在视口中时触发 IntersectionObserver

    The IntersectionObserver当元素在视口中可见达到一定程度 0 100 时触发 这意味着 当元素是已经 100 在视口中它不再触发 因为阈值没有变化 我有一个高度为200vh我想要IntersectionObserver
  • 将 Apache Shiro 安全库与基于 Dropwizard 的 JAX-RS 应用程序集成

    我正在尝试改变 Dropwizard 以支持 Shiro 我已阅读文档并且有点困惑 我想将 Shiro 与表单登录身份验证和 Apache Shiro 注释结合使用 我认为我需要使用 Jersey Filters 来支持 Shiro 这是在
  • Matplotlib:多线图

    我的数据框如下所示 Bin A B C Proba a Proba b Proba c gamma CPB 0 100 20841 23195 24546 34 503457 27 103303 22 859837 0 100 0 200
  • gwt-dev-mac.jar 丢失?

    我正在尝试在 Mac OS X 上使用 IntelliJ IDEA 进行 GWT 开发 并检查了同事在 Windows 上创建的 subversion 项目 项目文件附带了 GWT 的路径 C 这显然不适合我 当我在 模块设置 对话框中更改
  • 如何使用 pygame.KEYDOWN 在按住按键的情况下每次循环执行某些操作?

    我创建了 2 个函数 用于检查事件 def get pygame events pygame events pygame event get return pygame events and def get keys pressed sel
  • 最终在 Scala Try 中等效[重复]

    这个问题在这里已经有答案了 def doWork getLock Try useResource match case Success result gt releaseLock result case Failure e Exceptio
  • 使用scrollToPosition时不会调用RecyclerView onScrolled

    I have RecyclerView OnScrollListener像这样 findViewById R id button scroll to position setOnClickListener new View OnClickL
  • 在 R 中处理时间戳

    我有多个测量值列表 在每个列表中 时间戳都被格式化为字符串 2009 12 24 21 00 07 0 并且我知道列表中的每个测量值都以 5 秒分隔 我想将所有数据合并到 R 中的一个巨大的 data frame 中 之后我希望能够轻松访问
  • Python 字典列表投影、过滤器或子集?

    我正在尝试创建我认为的从较大字典空间到较小维度空间的 投影 所以 如果我有 mine name Al age 10 name Bert age 15 name Charles age 17 我试图找到一个仅返回的函数表达式 name Al
  • 从 iframe 中设置父窗口中的变量

    我有一个带有嵌入式 iframe 的父文档 在 iframe 内我有一个上传字段 一旦用户选择要上传的文件 我就会触发 jQuery 更改事件 在该事件中 我想将父窗口中的一个变量设置为 true 以便父窗口知道上传已开始 有谁知道如何做到
  • C# 使用丢弃 '_'

    我不太确定之间的区别 DataTable itemTable new DataTable itemTable CODE and new DataTable DataTable itemTable CODE 两者的工作原理完全相同 为什么我需
  • Javascript 调整 Firefox 弹出窗口的大小?

    我刚刚学习 Javascript 和 jQuery 但我是一名 HTML 人员 正在尝试迈出下一步 我正在尝试将内容放入表格中 该表格可以是任何大小 用于新闻网站 我检查大小 然后相应地调整弹出窗口的大小 虽然窗口不完全正确 但它可以工作
  • 不允许嵌套类的前向声明的原因?

    Example can t forward declare with class Foo Bar actual class class Foo public class Bar or enum Bar 我承认当前的 C 标准不允许这样做 但