我可以在类外部初始化“constexpr static”成员吗?

2023-11-23

我正在使用可变宽度通信格式。处理它的结构看起来像这样:

struct Header
{
  int msgType = -1, len;

  Header() { len = sizeof(*this); }
};

struct A : public Header
{
  int x; char y;

  A() { msgType = 1; len = sizeof(*this); }
};

// Further structs B, C, ... declared along the same lines

我想要一个constexpr static member Header::MAX_SIZE它给出了任何这些派生类的最大大小,例如所以我可以分配一个保证容纳任何此类数据包的缓冲区。所以我想做一些类似的事情

struct Header
{
  int msgType = -1, len;

  constexpr static std::size_t MAX_SIZE;

  Header() { len = sizeof(*this); }
};

// ... declaration of subclasses ...

inline Header::MAX_SIZE = std::max({ sizeof(A), sizeof(B), sizeof(C) });

我需要将定义放在类之外,因为它取决于sizeof(A)等等,这又取决于的定义Header.

看起来这种事情应该是没有异议的:我在同一个源文件中给出了成员的定义,并且可以在编译时计算它。但我还没有找到任何方法来告诉编译器实际执行此操作。


constexpr继续初始化变量的声明,所以只需将其放在类之外:

struct Header
{
  int msgType = -1, len;

  static const std::size_t MAX_SIZE;

  Header() { len = sizeof(*this); }
};

// ... declaration of subclasses ...

inline constexpr std::size_t Header::MAX_SIZE = std::max({ sizeof(A), sizeof(B), sizeof(C) });

请注意,隐式const必须在声明中写明。定义应该放在same标头以避免任何翻译单元看到声明但看不到inline,这是不允许的。

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

我可以在类外部初始化“constexpr static”成员吗? 的相关文章

  • 从 PDF 转换为 HTML [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 使用 ITextSharp 从内存流附加 PDF 文件时遇到问题

    我在附加内存中创建的 PDF 文件并将其附加到电子邮件模板时遇到问题 电子邮件没有任何问题 但没有附件 我不明白为什么会发生这种情况 这是该过程的完整代码 ExtendedEmailTemplate emailTemp new Extend
  • 为什么 extern int a ;初始化在本地给出错误,但在全局没有给出错误? [复制]

    这个问题在这里已经有答案了 extern int a 10 it is not giving error int main extern int b 10 it is giving error return 0 错误 b 同时具有 exte
  • Fortran DLL 导入

    Fortran 中有一段代码罗伯特 L 帕克和菲利普 B 斯塔克 http www stat berkeley edu 7Estark Code sbvq f FORTRAN subroutine bv key m n a b bl bu
  • 当 edmx 文件位于单独的项目中时出错

    我有问题说 在配置中找不到指定的命名连接 或者不打算与EntityClient提供者 或无效 我的 edmx 文件位于单独的项目中 但该项目的连接字符串app config 什么可能导致问题 确保 app config 位于设置为启动项目的
  • 在 C 中读取字符时打印

    我正在尝试编写一个简单的小代码片段来响应箭头键按下 我知道 up 由 A 表示 并且我有以下代码来检查该序列 while 1 input char fgetc stdin if input char EOF input char n bre
  • 用于测试 func(args) 是否格式良好且具有所需返回类型的特征

    有许多类似的问题 答案 但我无法将这些答案完全放在一起来服务于我的目的 我想要一个特质 template
  • 如何用单反斜杠替换双反斜杠

    我想用单反斜杠替换双反斜杠 Using string destinationFile System IO Path Combine msiDirectory fileName Replace gives C Hg temp LogFile
  • WPF 通知获取属性的 PropertyChanged

    我有INotifyPropertyChanged实施使用CallerMemberName public event PropertyChangedEventHandler PropertyChanged protected virtual
  • 从 Web 浏览器控件读取 Javascript 变量

    我正在尝试读取从表单上的 WebBrowser 控件加载和调用的 Javascript 变量的值 Example index html 引用名为 test js 的 javascript 在 test js 上 创建并填充了几个变量 然后i
  • .NET 4.0 进程中的 clr.dll!LogHelp_TerminateOnAssert

    背景 我正在开发一个基于 WinForm 的 NET 4 0 桌面应用程序 该应用程序几乎没有线程和计时器 并对用户控件使用一些 GDI 处理 在我的开发过程中 我通常会查看 sysinternal 的 Process Explorer 以
  • 无法将 User32.dll 导入 Visual Studio

    I tried To add 用户32 dll from 参考管理器 并将其导入自Windows System32 user32 dll I got 错误信息 无法添加对 C Windows System32 user32 dll 的引用
  • 更改 ASP.NET 控件的访问修饰符

    如果我像这样将控件放入 aspx 文件中
  • 底层连接已关闭:接收时发生意外错误

    我来这里是因为我在通过 ftp 协议下载一些文件时遇到问题 这很奇怪 因为它偶尔会发生 甚至对于同一个文件也是如此 只是一个精确度 我正在下载非常大的文件 从 500 Mo 到 30Go 以下是我的函数返回的异常类型 抱歉 这是法语 Sys
  • UWP 关闭信息亭模式

    我有一个发布到 Windows 应用商店的 UWP 应用程序 并且该应用程序可以启动进入信息亭模式 分配访问权限 它工作得很好 但我尝试在应用程序上创建一个按钮来关闭信息亭模式并返回到 Windows 登录屏幕 我尝试了文档中给出的代码 h
  • 在 C++ 中的 Switch-Case 中执行 OR 运算

    你会如何在 C 中做到这一点 例如 如果用户按 ESC 或 q 或 Q 我试图触发程序退出 我尝试寻找它 但在 C 中没有找到它的语法 我知道如何使用 if else 来做到这一点 但是可以使用 switch case 来做到这一点吗 当然
  • 非静态类中的静态方法有什么意义?

    我无法理解以下代码的潜在错误 class myClass public void print string mess Console WriteLine mess class myOtherClass public static void
  • 如何在 C# 中按进程获取打开文件句柄的列表?

    如何在 C 中通过进程 ID 获取打开文件句柄的列表 我也有兴趣挖掘并获取文件名 寻找与流程资源管理器所做的等效的编程 这很可能需要互操作 考虑到对此添加赏金 实现起来非常复杂 哎呀 这很难从托管代码中做到 有一个 大多数事情都可以在互操作
  • C++中main函数可以调用自身吗?

    谁能告诉我下面的代码有什么问题吗 int main return main 我测试了一下 编译正确 它永远运行 幕后还有什么阴谋吗 TLDR 呼叫main导致未定义的行为 标准中使用的术语以及对程序员和编译器的影响似乎存在混淆 首先 单独的
  • ASP.NET 中的 ThreadStaticAttribute

    我有一个需要存储的组件static每个线程的值 它是一个通用组件 可以在许多场景中使用 而不仅仅是在 ASP NET 中 我想用 ThreadStatic 属性来实现我的目标 假设它在 ASP NET 场景中也能正常工作 因为我假设每个请求

随机推荐

  • 错误“您提供的执行角色必须允许 AWS EventBridge Scheduler 承担该角色。”

    我正在创建一个角色来自动重新启动 EC2 实例 但我收到此错误 您提供的执行角色必须允许 AWS EventBridge Scheduler 承担该角色 在角色中 我添加了这些权限 我知道这大部分太多了 但仍然不够 因为我收到了错误 知道吗
  • Python Popen 清理

    我想使用相当于在 perl 中管道传输一些 shell 命令的 python 类似于 python 版本的 open PIPE command 我转到子流程模块并尝试以下操作 p subprocess Popen zgrep thingiw
  • 如何使用 CSS 将长单词换行并避免水平滚动?

    我有以下 html div class box long text here div and css box width 400px height 100px overflow auto border 1px gold solid 我只想要
  • 原子操作的成本是多少?

    原子操作 任何比较和交换或原子加 减 的成本是多少 消耗多少周期 它会暂停 SMP 或 NUMA 上的其他处理器 还是会阻止内存访问 它会刷新乱序 CPU 中的重新排序缓冲区吗 对缓存会有什么影响 我对现代流行的 CPU 感兴趣 x86 x
  • 无法加载文件或程序集“System.Web.Mvc”

    我的新 ASP NET MVC Web 应用程序可以在我的开发工作站上运行 但不能在我的 Web 服务器上运行 应用程序中的服务器错误 配置错误 描述 处理服务此请求所需的配置文件期间发生错误 请查看下面的具体错误详细信息并适当修改您的配置
  • MySQL触发器/过程执行延迟

    有没有一种好的方法可以延迟mysql触发器的执行 WHILE condition 0 sleep for awhile insert into some table values NEW value1 NEW value2 从 MySQL
  • “帖子的链接必须指向应用程序的连接或画布 URL”- 错误

    我正在尝试发布到用户墙 但当共享窗口弹出时我收到此错误 The post s links must direct to the application s connect or canvas URL 现在 我进行了适当的 Google 搜索
  • 打破 R 中的嵌套循环

    非常简单的示例代码 仅用于演示 没有任何用处 repeat while 1 gt 0 for i in seq 1 100 break usually tied to a condition break break print finish
  • .NET Core Entity Framework - 在类库中添加 Context 迁移

    我在将初始迁移添加到 NET Core 类库内的实体框架数据库上下文时遇到问题 当我跑步时 dotnet ef migrations add migrationName c PlaceholderContext 我收到错误 Could no
  • 调试器可视化工具和“类型未标记为可序列化”

    我正在尝试创建一个调试器可视化工具 它可以显示任何内容的控制层次结构Control 已完成 但我遇到了例外 类型未标记为可序列化 我该如何克服这个问题 控件是 NET Windows Forms框架类型 我无法将其标记为可序列化 您还需要实
  • 为什么 const 允许参数中引用的隐式转换?

    这听起来像是一个愚蠢的问题 但我对以下行为感到困惑 void funcTakingRef unsigned int arg std cout lt lt arg void funcTakingByValue unsigned int arg
  • 带或不带引号的 JSON 对象

    我正在尝试学习 JSON 我了解到任何带有双引号的键的 javascript 对象都被视为 JSON 对象 我构建了这个对象 var jstr1 mykey my value 但是当我尝试使用 JSON parse jstr1 进行解析时
  • PROJ.4 库和 OSGB36

    一切顺利 我正在尝试使用 proj 4 库将纬度 经度坐标转换为 OSGB36 x 和 y 还有其他人成功地做到了这一点吗 我需要填充 srcPrj4String 和 destPrj4String 变量 例如 字符串 srcPrj4Stri
  • jQuery 可移动模态对话框

    我一直在寻找可拖动模式框的所有可用 jQuery 插件 唯一的问题是我发现的每个可拖动的模式框都需要标题栏 有谁知道有什么 jQuery 插件可以让我创建一个没有标题栏的可拖动模式框吗 在这种情况下 您可以通过框的边框拖动它 有什么方法可以
  • 无法访问 attr_accessor 定义的变量

    我正在使用 Thinking Sphinx 来运行搜索 并且我得到了适当的 ActiveRecord 模型 问题是 我想在每个模型上创建适当的链接路径和文本 然后通过 AJAX 将信息以 JSON 形式发送到浏览器 我使用以下内容来构建这些
  • 如何限制cakephp中的分页

    如何限制 cakephp 中的分页 假设我有 400 条记录 我只需要获取从第50条记录到第75条记录的25条记录 每页需要显示5条记录 我如何在分页中做到这一点 示例代码 this gt paginate array contain gt
  • Google App Engine Node.js 应用程序不健康

    我正在尝试在谷歌应用程序引擎上测试一个相当简单的node js应用程序 如下所示 它要做的就是监听 Firebase 数据库中的更改 然后向用户发送 GCM 消息 var Firebase require firebase var gcm
  • Apache HTTP BasicScheme.authenticate 已弃用?

    在 Apache HTTP Component 4 类 org apache http impl auth BasicScheme 中 我注意到该方法 public static Header authenticate final Cred
  • 动画边距/厚度

    我只是以为我已经知道 WPF 和 XAML 语法是如何工作的 呜呜 我收到消息 WithEvents variables can only be typed as classes interfaces or type parameters
  • 我可以在类外部初始化“constexpr static”成员吗?

    我正在使用可变宽度通信格式 处理它的结构看起来像这样 struct Header int msgType 1 len Header len sizeof this struct A public Header int x char y A