使用 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 变量观察到的不同行为 的相关文章

  • ROWNUM 的 OracleType 是什么

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

    我正在尝试创建 DirectoryEntry 的实例 以便可以使用它来测试将传递 DirectoryEntry 的一些代码 然而 尽管进行了很多尝试 我还是找不到实例化 DE 并初始化它的 PropertyCollection 的方法 我有
  • C++:无法使用scoped_allocator_adaptor传播polymorphic_allocator

    我有一个vector
  • Func 方法参数的首选命名约定是什么?

    我承认这个问题是主观的 但我对社区的观点感兴趣 我有一个缓存类 它采用类型的缓存加载器函数Func
  • Cygwin 下使用 CMake 编译库

    我一直在尝试使用 CMake 来编译 TinyXML 作为一种迷你项目 尝试学习 CMake 作为补充 我试图将其编译成动态库并自行安装 以便它可以工作 到目前为止 我已经设法编译和安装它 但它编译成 dll 和 dll a 让它工作的唯一
  • 为什么 POSIX 允许在只读模式下超出现有文件结尾 (fseek) 进行搜索

    为什么寻找文件结尾很有用 为什么 POSIX 让我们像示例中那样在以只读方式打开的文件中进行查找 c http en cppreference com w c io fseek http en cppreference com w c io
  • 为什么禁止在 constexpr 函数中使用 goto?

    C 14 对你能做什么和不能做什么有规则constexpr功能 其中一些 没有asm 没有静态变量 看起来相当合理 但标准也不允许goto in constexpr功能 即使它允许其他控制流机制 这种区别背后的原因是什么 我以为我们已经过去
  • C# 中值类型和引用类型有什么区别? [复制]

    这个问题在这里已经有答案了 我知道一些差异 值类型存储在堆栈上 而引用类型存储在托管堆上 值类型变量直接包含它们的值 而引用变量仅包含对托管堆上创建的对象位置的引用 我错过了任何其他区别吗 如果是的话 它们是什么 请阅读 堆栈是一个实现细节
  • 写入和读取文本文件 - C# Windows 通用平台应用程序 Windows 10

    有用 但在显示任何内容之前 您必须在文本框中输入内容 我想那是因为我使用了 TextChanged 事件处理程序 如果我希望它在没有用户交互的情况下显示文本文件的内容 我应该使用哪个事件处理程序 因此 我想在按下按钮时将一些数据写入 C W
  • 使用 Google Analytics API 在 C# 中显示信息

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

    海湾合作委员会 4 4 4 c89 我的程序做了很多字符串处理 我不想使用 strncpy 因为它不会终止 我不能使用 strlcpy 因为它不可移植 只是几个问题 我怎样才能让我的函数正常运行 以确保它完全安全稳定 单元测试 这对于生产来
  • 像“1$”这样的位置参数如何与 printf() 一起使用?

    By man I find printf d width num and printf 2 1 d width num 是等价的 但在我看来 第二种风格应该与以下相同 printf d num width 然而通过测试似乎man是对的 为什
  • .NET 选项将视频文件流式传输为网络摄像头图像

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

    我用 Java 编写了一些 SOAP Web 服务 在 JBoss 5 1 上运行 其中两个共享一个类 AddressTO Web 服务在我的 ApplycationServer 上正确部署 一切都很顺利 直到我尝试在我的 C 客户端中使用
  • 用 C 实现 Unix shell:检查文件是否可执行

    我正在努力用 C 语言实现 Unix shell 目前正在处理相对路径的问题 特别是在输入命令时 现在 我每次都必须输入可执行文件的完整路径 而我宁愿简单地输入 ls 或 cat 我已经设法获取 PATH 环境变量 我的想法是在 字符处拆分
  • AccessViolationException 未处理

    我正在尝试使用史蒂夫 桑德森的博客文章 http blog stevensanderson com 2010 01 28 editing a variable length list aspnet mvc 2 style 为了在我的 ASP
  • 检查 url 是否指向文件或页面

    我们需要以下内容 如果文件确实是文件 则从 URL 下载该文件 否则 如果它是一个页面 则什么也不做 举个简单的例子 我有以下命令来下载文件 My Computer Network DownloadFile http www wired c
  • 如何在 C# 中播放在线资源中的 .mp3 文件?

    我的问题与此非常相似question https stackoverflow com questions 7556672 mp3 play from stream on c sharp 我有音乐网址 网址如http site com aud
  • 将变量分配给另一个变量,并将一个变量的更改反映到另一个变量中

    是否可以将一个变量分配给另一个变量 并且当您更改第二个变量时 更改会瀑布式下降到第一个变量 像这样 int a 0 int b a b 1 现在 b 和 a 都 1 我问这个问题的原因是因为我有 4 个要跟踪的对象 并且我使用名为 curr
  • 更改显示的 DPI 缩放大小使 Qt 应用程序的字体大小渲染得更大

    我使用 Qt 创建了一些 GUI 应用程序 我的 GUI 应用程序包含按钮和单选按钮等控件 当我运行应用程序时 按钮内的按钮和字体看起来正常 当我将显示器的 DPI 缩放大小从 100 更改为 150 或 200 时 无论分辨率如何 控件的

随机推荐

  • 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