使用 constexpr auto/char-array 变量观察到的不同行为

2024-03-05

跟进这个问题拥有 constexpr 静态字符串会导致链接器错误 https://stackoverflow.com/questions/34792403/having-a-constexpr-static-string-gives-a-linker-error#34792443

在问题中,这段代码无法编译:

#include <iostream>

struct Test { static constexpr char text[] = "Text"; };

int main()
{
    std::cout << Test::text << std::endl; // error: undefined reference to `Test::text'
}

从注释来看,这段代码可以编译:

#include <iostream>

struct Test { static constexpr auto text = "Text"; };

int main()
{
    std::cout << Test::text << std::endl;
}

我的问题是为什么auto版本有效,但数组char版本没有?

您能否指出标准中允许第二个版本而不允许第一个版本的声明?

我看了一下constexpr 静态成员变量的奇怪行为 https://stackoverflow.com/questions/28530583/strange-behavior-with-constexpr-static-member-variable但这似乎是另一个问题。


类中静态数据成员的声明绝不是定义。
您的示例之间的区别在于,只有一个需要定义text.

The auto版本推论char const*, hence text只进行左值到右值的转换,不使用 ODR。相比之下,第一个代码有效地通过了text的地址,odr-use-ing它 - 即需要一个定义。

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

使用 constexpr auto/char-array 变量观察到的不同行为 的相关文章

随机推荐

  • Django - 没有名为 app 的模块

    我一直在尝试让 django 编写的应用程序正常工作 但它根本不工作 我也已经工作了一段时间 它在开发服务器上完美运行 但我无法放入生产环境 apahce 我的项目名称是 apstat 应用程序名称是 basic 我尝试按以下方式访问它 块
  • Python 多处理:同步类文件对象

    我正在尝试创建一个类似对象的文件 该对象在测试期间分配给 sys stdout sys stderr 以提供确定性输出 它并不意味着快速 只是可靠 到目前为止我所拥有的almost有效 但我需要一些帮助来消除最后几个边缘情况错误 这是我当前
  • HQL 意外的 AST 节点::

    我的代码无法注入以下存储库 根据堆栈跟踪 我的 HQL 语法似乎无效 但我不确定我做错了什么 Repository public interface JobSetRepository extends JpaRepository
  • 命令“npm install fs”出现问题

    我不习惯使用 Linux 所以也许这是一个愚蠢的问题 在我正在进行的实验室中 系统要求我运行命令 npm install fs 来读取 写入文件 但这是我遇到的错误 我不知道如何解决它 我也找不到类似的问题 PS 我正在 Ubuntu 17
  • 帮助在 Node.js 中需要 npm 模块

    我觉得我在这里缺少一些非常基本的东西 所以我安装了一个 npm 库npm install somelib 根据我读过的内容 我应该能够简单地做一个 var somelib require somelib 但它找不到任何东西 我确实有一个no
  • Chrome 中的 ScriptManager.RegisterHiddenField

    我正在处理一些利用 ScriptManager RegisterHiddenField 来跟踪数据模型修改的代码 它在 IE 和 FF 中运行良好 但在 Chrome 中遇到问题 如果您添加以下内容 就会出现该问题的一个简单示例 prote
  • 如何获取 ClickOnce 应用程序的文件夹路径

    我需要在控制台 ClickOnce 所在的同一文件夹中写入一个文件 application 可执行文件 驻留 它从中启动的文件夹 我尝试使用Application StartupPath Path GetDirectoryName Asse
  • 在C中缩小文件

    如何用 C 语言缩小文件 例如 如果我打开一个 2mb 的文件 做了一些工作并决定只有 1mb 的文件仍然存在 这是如何完成的 我知道如何使用 write fd 写入文件 但是如果我想在文件中间切出某些部分或截断它怎么办 您可能正在寻找tr
  • 组合多个控件的控件子类

    我正在尝试扩展 TextBox 以在其左侧添加一个标签并将其视为一个控件 这样我就不必跟踪它们的大小 位置等 我创建了一个扩展 Control 并具有 TextBox 和 Label 字段的 TextBoxWithLabel 类 但我不太确
  • BASH_REMATCH 不捕获

    我正在尝试捕获 bash 中路径的一部分 Input Users foo virtualenvs venv test server Code bin zsh regex venv if VIRTUAL ENV regex then echo
  • 将图像插入 MySQL 数据库或从 MySQL 数据库查看图像

    我在数据库中插入图像时遇到问题 该表具有以下结构 id gt INT 3 gt 自动增量 名称 gt VARCHAR 30 扩展名 gt VARCHAR 10 可能太短 img gt 中型BLOB 插入图像的PHP代码是 if FILES
  • 通过滚动移动 DIV

    我正在创建一个 jQuery 滚动条 它滚动 中的内容 这就像jQuery 滚动窗格 http jscrollpane kelvinluck com 我已经到了需要移动滚动按钮的地步 我的问题是 在没有任何 UI 插件的情况下 最好的方法是
  • 如果我加载一个包含 (ns my-namespace) 的文件,为什么它不切换我当前的命名空间?

    我有一个这样的文件 ns boston core If I load boston core 然而 从 REPL 来看 我的 ns 没有改变为boston但仍然存在user 为什么是这样 这是因为 load 只是加载指定的文件 到 bost
  • 从 glm 中提取 p 值

    我正在运行许多回归 并且只对一个特定变量的系数和 p 值的影响感兴趣 因此 在我的脚本中 我希望能够从 glm 摘要中提取 p 值 获取系数本身很容易 我知道查看 p 值的唯一方法是使用 summary myReg 还有其他办法吗 e g
  • 如何检测会话何时结束

    有没有办法检测有人离开您的网站 到目前为止我知道如何使用ignore user abort 但据我所知 这就是了 我需要知道这一点的原因是因为我需要一个脚本来在有人离开网站时执行 在数据库中为每个用户记录一个时间戳 并在每次页面加载时 或通
  • 如何暂时禁用“返回值可能未定义”警告?

    我想在代码中禁用特定警告 W1035 因为我认为编译器对此警告是错误的 function TfrmNagScreen Run TOption begin if ShowModal mrOk then Result TOption rdgAc
  • Bootstrap 3 导航栏链接不起作用

    我有一个带有链接的导航栏 品牌 链接有效 但没有任何内容ul做 我读过关于e preventDefault 当它与 ul nav gt li click function e 我也读过它与z index 我没有发现任何这样的情况 除非我找不
  • Heiken Ashi 使用 pandas python

    I was defining a function Heiken Ashi which is one of the popular chart type in Technical Analysis I was writing a funct
  • Android DatePicker 显示月份名称

    我正在尝试使用日期选择器 并且在选择时我想以以下格式显示日期 月份名称 日期 年份 final Calendar c Calendar getInstance mYear c get Calendar YEAR 13 mMonth c ge
  • 使用 constexpr auto/char-array 变量观察到的不同行为

    跟进这个问题拥有 constexpr 静态字符串会导致链接器错误 https stackoverflow com questions 34792403 having a constexpr static string gives a lin