如何在命名空间范围内前向声明 constexpr 对象?

2024-01-25

在 clang (主干)上,我可以转发声明一个对象,稍后将用constexpr如下:

// Fwd-declarations
struct S;
extern const S s;

// (... later) definitions
struct S {};
constexpr S s {};

Gcc 4.8 不喜欢这样,告诉我前向声明和定义不同constexpr-性。 gcc 说的是实话,还是这只是 gcc 的 bug?


我在 C++11 标准副本中找不到任何明确禁止的语言constexpr- 声明和定义之间不匹配,但我确实看到语言明确禁止constexpr与一起使用extern(第 7.1.5 节),我还看到需要类级别初始化程序的语言static constexpr变量在类中。另外,由于效用constexpr当变量或其类型的定义不可用时,会显着减少,我认为其意图可能是constexpr必须定义变量(或者,对于static类成员(已初始化)在声明时。

作为解决方法,也许您可​​以提供extern变量的别名。这将允许您获取其地址,这是我能想到的前向声明允许的唯一事情。例如:

// .hpp file:
struct C;
extern C const &c;

// .cpp file:
struct C {
    constexpr C() { }
};
constexpr C cc;
C const &c = cc;

旁注:我知道在 C++14 中,他们重新访问/正在重新访问constexpr,所以它可能在 Clang 中工作,因为它正在实现 C++14 的一些草案规范。

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

如何在命名空间范围内前向声明 constexpr 对象? 的相关文章

随机推荐

  • ListBox 中的 DataTextField 是 2 个字段的组合

    我有一个包含用户的列表框 数据源是 User 类型的通用列表 包含 id firstname lastname 现在我想使用 id 作为数据值 通过 dataValueField 并且我想要 LastName Firstname 作为 Da
  • 为什么在图像和 CSS 文件之后查询字符串?

    我在各个网站上看到过一个查询字符串 后面跟着一个图像和 CSS 文件的数字 当我查看源代码 通过 Chrome Developer 时 缓存的 css 文件和图像的名称中没有查询字符串中的数字 我还在网站上看到 当我刷新页面时 查询字符串中
  • 从可迭代的乘积中创建 Pandas MultiIndex?

    当我有两个或多个可迭代对象时 我有一个实用程序函数用于创建 Pandas MultiIndex 并且我想要为这些可迭代对象中的值的每个唯一配对提供一个索引键 看起来像这样 import pandas as pd import itertoo
  • 在javascript中将字符串数组转换为名称/值对象

    我目前正在处理一个向客户端返回字符串数组的 Web 服务 从这里我想获取这个字符串数组并将其转换为一个对象 该对象为每个字符串提供一个名称 以便稍后引用它 所以从这个开始 var result test hello goodbye 我想以此
  • .Net Windows 应用程序 WebBrowser / Google 地图 API v3

    我正在开发一个应用程序 用户可以在其中输入所需的地址 然后按按钮 该地址可以在WebBrowser net windows 应用程序中的控制 我知道你可以运行 javascriptWebBrowser通过使用WebBrowser1 Docu
  • 获取git命令列表

    我想为每个 git 命令创建一个别名 由于它们有很多 我想将它们放在一个列表中 然后在我的循环中循环 bashrc 有什么办法可以将它们写入 shell 脚本中吗 你可以试试这个 git help a 或者 您的 git 命令列在
  • Spring AOP Aspect 无法使用 Mockito 工作

    我有一个 Aspect它编织了我所有控制器操作方法的执行 当我运行系统时它工作得很好 但在单元测试中却不行 我按以下方式使用 Mockito 和 junit RunWith SpringJUnit4ClassRunner class Con
  • asp.net mvc url 路由

    如何映射诸如domain com 用户名之类的内容 问题是我认为 MVC 路由会寻找控制器来确定它应该如何处理映射请求 我对 ASP NET MVC 还很陌生 然而 根据迄今为止的教程 路由机制似乎相当僵化 它实际上非常灵活 我想如果您有更
  • 在 Typescript 中选择材质 UI

    我使用 Material UI select 创建了一个下拉菜单 它说 搜索依据 当我们点击它时 它会给我们一个列表 当我选择其中一个选项时 我想存储该选项并将 搜索依据 更改为所选选项 export default function Us
  • 销毁免费墙实例

    我正在使用jquery Freewall 插件 http vnjs net www project freewall 我想知道如何销毁它的一个实例 我写了一个小例子供大家理解 var startFreewall function funct
  • 将数据从一个子布局发送到 sitecore 中的另一个子布局

    我很难在 Sitecore 7 中构建过滤系统 我有 2 个子布局 位于页面的同一级别 子布局 A 是一个侧边栏 其中包含复选框列表 并具有一个用所选值填充列表的事件 子布局 B 显示一组项目 我想做的是将填充的列表从子布局 A 发送到子布
  • 在 proto 中从父文件夹导入到子文件夹

    我正在尝试将原型 defn 从父原型导入到具有以下文件夹结构的子原型中 parent proto sub child proto 父级 proto message Attribute 子原型 import parent proto mess
  • 在一列上使用 unique 并在另一列上执行 order by 会产生错误

    我有一张桌子 abc test 包含 n num k str 列 此查询不起作用 select distinct n num from abc test order by k str 但这有效 select n num from abc t
  • 请逐步解释递归[关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 请逐步解释递归 public class TestClass private static void printit i
  • 成功安装 Python 自制程序后,运行“pip”会出现“找不到命令”

    前言 我对终端很不好 请耐心等待 当我跑步时pip我得到 zsh command not found pip 我已经安装了带有brew的Python 2 7 11 这应该允许pip工作 当我跑步时echo PATH I get usr lo
  • 如何判断一个点是否在一组区间内?

    我正在寻找最快的方法来确定线上的点是否在该线的子集中 我得到了一个整数 Point 并且我还有一个 列表 点 用整数表示 3 10 1000 等 间隔 我用 2 个整数表示 2 10 是从 2 到 10 的所有整数 50 60 等 在此示例
  • Android 图像视图矩阵缩放 + 平移

    我正在尝试手动获取以图像视图为中心并适合屏幕的图像 我需要用矩阵来完成 稍后我将动态更改矩阵变换 问题是我无法使图像在视图中居中 比例合适 这是代码 Compute the scale to choose this works float
  • npm 安装错误:rollbackFailedOptional:命令 npm install --save-dev @babel/core @babel/cli 的动词 npm-session a0d68

    当我尝试安装 babel 时 我不断收到此错误 rollbackFailedOptional verb npm session a0d68 节点版本为12 16 1 npm 版本是 6 13 4 我只是想安装 babel 并探索它是如何工作
  • 在 Laravel 中使用 number_format 方法

    我对 Laravel 和 Blade 模板相当陌生 谁能帮我展示如何做到这一点 我有这样的看法 foreach Expenses as Expense tr td Expense gt type td td Expense gt narra
  • 如何在命名空间范围内前向声明 constexpr 对象?

    在 clang 主干 上 我可以转发声明一个对象 稍后将用constexpr如下 Fwd declarations struct S extern const S s later definitions struct S constexpr