offsetof 可以与从 decltype 获得的结构类型一起使用吗?

2024-04-08

Can offsetof与通过获得的类型一起使用decltype?这两种情况中的任何一种都有效 C++11 吗?

struct S {
  int i;
  int j { offsetof(decltype(*this), i) };  // case 1
  S() : i(offsetof(decltype(*this), j)) {}; // case 2
} inst1;

int main() {
  struct {
    int i;
    int j { offsetof(decltype(*this), i) }; // case 3
  } inst2;
  return 0;
}

它们都不能在 Apple LLVM 版本 6.0 (clang-600.0.57)(基于 LLVM 3.5svn)下编译,并出现错误

error: offsetof requires struct, union, or class type, 
'decltype(*this)' (aka '<anonymous struct at ../qxjs3uu/main.cpp:4:4> &') invalid

它还似乎导致 MSVC 19.00.23106.0(x86) 崩溃并出现内部错误:

Compiled with  /EHsc /nologo /W4 /c
main.cpp
main.cpp(3): error C2062: type 'S &' unexpected
[...]
main.cpp(4): fatal error C1903: unable to recover from previous error(s); stopping compilation
Internal Compiler Error in c:\tools_root\cl\bin\i386\cl.exe.  You will be prompted to send an error report to Microsoft later.

我是否想到了测试用例编写者没有想到的东西?


取消引用指针的结果是一个左值(它本身是一个表达式),因此decltype(*this)给你输入S&:

§ 7.1.6.2 [dcl.type.simple]/p4:

表示的类型decltype(e)定义如下:

— [...]

——否则,如果e是一个左值,decltype(e) is T&, where T是类型e;

使用它作为参数offsetof,您需要从从获取的类型中删除引用decltype()说明符:

offsetof(std::remove_reference<decltype(*this)>::type, i)

DEMO http://coliru.stacked-crooked.com/a/e80eb98d53edb9bd

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

offsetof 可以与从 decltype 获得的结构类型一起使用吗? 的相关文章

  • 赋值运算符和复制构造函数有什么区别?

    我不明白C 中赋值构造函数和复制构造函数之间的区别 是这样的 class A public A cout lt lt A A lt lt endl The copy constructor A a b The assignment cons
  • 添加对共享类的多个 WCF 服务的服务引用

    我正在尝试将我的 WCF Web 服务拆分为几个服务 而不是一个巨大的服务 但是 Visual Studio Silverlight 客户端 复制了两个服务共享的公共类 这是一个简单的例子来说明我的问题 在此示例中 有两个服务 两者都返回类
  • 在 C++ 中分割大文件

    我正在尝试编写一个程序 该程序接受一个大文件 任何类型 并将其分成许多较小的 块 我想我已经有了基本的想法 但由于某种原因我无法创建超过 12 kb 的块大小 我知道谷歌等上有一些解决方案 但我更感兴趣的是了解这个限制的根源是什么 然后实际
  • 如何进行带有偏差的浮点舍入(始终向上或向下舍入)?

    我想以偏置舍入浮动 要么总是向下 要么总是向上 代码中有一个特定的点 我需要这个 程序的其余部分应该像往常一样四舍五入到最接近的值 例如 我想四舍五入到最接近的 1 10 倍数 最接近 7 10 的浮点数约为 0 69999998807 但
  • 捕获 foreach 条件中抛出的异常

    我有一个foreach在 foreach 本身的条件下循环期间中断的循环 有没有办法try catch抛出异常然后继续循环的项 这将运行几次 直到异常发生然后结束 try foreach b in bees exception is in
  • 使用实体框架从集合中删除项目

    我正在使用DDD 我有一个 Product 类 它是一个聚合根 public class Product IAggregateRoot public virtual ICollection
  • 有什么工具可以说明每种方法运行需要多长时间?

    我的程序的某些部分速度很慢 我想知道是否有我可以使用的工具 例如它可以告诉我可以运行 methodA 花了 100ms 等等 或者类似的有用信息 如果您使用的是 Visual Studio Team System 性能工具 中有一个内置分析
  • Guid 应包含 32 位数字和 4 个破折号

    我有一个包含 createuserwizard 控件的网站 创建帐户后 验证电子邮件及其验证 URL 将发送到用户的电子邮件地址 但是 当我进行测试运行时 单击电子邮件中的 URL 时 会出现以下错误 Guid should contain
  • ZLIB 解压缩

    我编写了一个小型应用程序 该应用程序应该解压缩以 gzip deflate 格式编码的数据 为了实现这一点 我使用 ZLIB 库 使用解压缩功能 问题是这个功能不起作用 换句话说 数据不是未压缩的 我在这里发布代码 int decompre
  • C++11 函数局部静态 const 对象的线程安全初始化

    这个问题已在 C 98 上下文中提出 并在该上下文中得到回答 但没有明确说明有关 C 11 的内容 const some type create const thingy lock my lock some mutex static con
  • 如何用 kevent() 替换 select() 以获得更高的性能?

    来自Kqueue 维基百科页面 http en wikipedia org wiki Kqueue Kqueue 在内核和用户空间之间提供高效的输入和输出事件管道 因此 可以修改事件过滤器以及接收待处理事件 同时每次主事件循环迭代仅使用对
  • 转到 C# WPF 中的第一页

    我正在 WPF 中使用导航服务 为了导航到页面 我使用 this NavigationService Navigate new MyPage 为了返回我使用 this NavigationService GoBack 但是如何在不使用的情况
  • C++派生模板类继承自模板基类,无法调用基类构造函数[重复]

    这个问题在这里已经有答案了 我试图从基类 模板 继承 派生类也是模板 它们具有相同的类型 T 我收到编译错误 非法成员初始化 Base 不是基类或成员 为什么 如何调用基类构造函数 include
  • gdb 在 docker 上立即退出“进程已完成,退出代码 1”或 lldb“数据包返回错误 8”。另外:如何在 docker 中允许进行 C++ 调试

    这花了我一整天的时间才找到 所以我将其发布以供将来参考 我正在 docker 镜像上开发 C 我正在使用克利翁 我的代码是在调试模式下编译的 并且在运行模式下运行良好 但是当尝试调试时 进程会立即退出 并显示非常丰富的信息 Process
  • 单元测试失败,异常代码为 c0000005

    我正在尝试使用本机单元测试项目在 Visual Studios 2012 中创建单元测试 这是我的测试 TEST METHOD CalculationsRoundTests int result Calculations Round 1 0
  • C# 搜索目录中包含字符串的所有文件,然后返回该字符串

    使用用户在文本框中输入的内容 我想搜索目录中的哪个文件包含该文本 然后我想解析出信息 但我似乎找不到该字符串或至少返回信息 任何帮助将不胜感激 我当前的代码 private void btnSearchSerial Click object
  • 是否有一个 C++ 库可以从 PDF 文件中提取文本,例如 PDFBox for Java? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 去年 我使用 PDFBox 在 Java 中创建了一个应用程序来获取某些 PDF 文件中的原始文本 现在
  • 如何检测 C# 中该字典键是否存在?

    我正在使用 Exchange Web 服务托管 API 和联系人数据 我有以下代码 即功能性的 但并不理想 foreach Contact c in contactList string openItemUrl https service
  • 热重载时调用方法

    我正在使用 Visual Studio 2022 和 C 制作游戏 我想知道当您热重新加载应用程序 当它正在运行时 时是否可以触发一些代码 我基本上有 2 个名为 UnloadLevel 和 LoadLevel 的方法 我想在热重载时执行它
  • Azure函数版本2.0-应用程序blobTrigger不工作

    我有一个工作功能应用程序 它有一个 blob 输入和一个事件中心输出 在测试版中工作 随着最新的更改 我的功能不再起作用 我尝试根据发行说明更新 host json 文件 但它没有引用 blob 触发器 version 2 0 extens

随机推荐

  • Angular 2:防止路由器添加到历史记录

    我们有一个客户 在我们的应用程序中使用 iFraming 访问他们的网站 他们不希望我们应用程序中的路由器导航影响他们自己网站的后退按钮导航 我们尝试了几种方法 包括使用发布消息来尝试在history back 被触发时让iFrame与父窗
  • 忽略 Inf 值并运行 lm 回归

    这些是我的变量 gt dput y c 22 0713165394207 14 0880914427811 10 9650636244176 1 96648890706268 5 30593850426708 7 5465191603778
  • @MainActor 类是对主要参与者的扩展吗?

    如果正在上课 MainActor MainActor class MyClass NSObject 这是否将其所有扩展放在 MainActor还有 extension MyClass Yes As SE 0316 全球演员 https gi
  • 无法更改购物车总计中的 WooCommerce 优惠券标签

    事实证明 这是一个我无法解决的挑战 我几乎在其他地方都处理过将 优惠券 重命名为 促销 的工作 然而 调用优惠券名称和LABEL的WC LABEL的重命名就困难了很多 这是我正在谈论的内容的屏幕截图 我几乎已将站点范围内 优惠券 的所有用途
  • 为什么预期的字符串变成元组[重复]

    这个问题在这里已经有答案了 我预计变量output format成为一个字符串 但是当我运行脚本时它给了我一个tuple类型并抛出异常 如果我在 Python 解释器中运行 它会给我一个预期的字符串 sout standard access
  • 使用 PHP 内置 Web 服务器进行无脂路由

    我正在学习 fatfree 的路线 发现它的表现出乎意料 这是我在index php中的代码 f3 require once dirname dirname FILE lib base php f3 Base instance echo r
  • 如何将 UIView 出口连接到自定义子视图

    我还是 xcode iOS 新手 并且有以下问题 为了显示一些移动调试信息 我将 UIview 作为出口属性添加 连接到我的视图控制器之一 该视图是 UIview 的自定义子类 现在 我添加了一些 UIlabels 作为子视图到该视图中 并
  • 在 Java 中从 XML 生成/获取 Xpath

    我对建议 伪代码代码 解释而不是实际实现感兴趣 我想浏览 XML 文档及其所有节点 检查节点属性是否存在 如果节点没有属性 get generate String with value of its xpath如果节点确实有属性 则迭代属性
  • 使用编辑器/显示模板中的部分

    我想将所有 JavaScript 代码保留在一个部分中 就在收盘前body在我的主布局页面中标记 只是想知道最好的方法 MVC 风格 例如 如果我创建一个DisplayTemplate DateTime cshtml文件使用 jQuery
  • ARKit 的相机空间朝向是什么?

    我想更好地理解 ARKit AR Camera 变换所在的相机坐标空间 在文档中 https developer apple com documentation arkit arcamera 2866108 transform 它说 此变换
  • 使用 JWI 和 Wordnet 获取词干

    我该如何正确使用词干分析法 http projects csail mit edu jwi api edu mit jwi morph WordnetStemmer html为了获取单词的词干 在 MIT 的 JWI Java API fo
  • 具有多对多关系模型的 Flask-Admin 视图

    我有一个带有用户和用户角色的基本 Flask admin 设置 class Role db Model RoleMixin id db Column db Integer primary key True name db Column db
  • OSError - Errno 13 权限被拒绝

    我试图通过管理页面上传图像 但它一直说 Errno 13 Permission denied path to my site media userfolder 2014 05 26 文件夹userfolder 2014 05 26上传时动态
  • 将 GPUJPEG 项目移植到 Windows

    我目前正在尝试移植 GPUJPEG 在 Sourceforge 上 http sourceforge net projects gpujpeg 库 基于 CUDA 从 Unix 到 Windows 现在我被卡住了 我不知道发生了什么或为什么
  • 如何将音频添加到我的 ffmpeg 流中

    我想将音频添加到我的 ffmpeg cli 中 ffmpeg framerate 25 video size 1920x1080 f x11grab i 0 0 vf format yuv420p http localhost 8080 f
  • 如何优雅地关闭 Spring JMS MessageListenerAdapter

    我有一个消息处理程序 它从 JMS 队列中使用并将结果发送到另一个 JMS 队列 消息处理程序位于 Spring DefaultMessageListenerContainer 中 当容器关闭时 我希望它完成处理它已经消耗的任何请求并发送结
  • 由 ECS 集群容量提供商管理的 AWS AutoScaling 组由于保护而无法扩展

    我有一个由自动扩展组中的 EC2 计算机支持的 ECS 集群 该集群使用 CloudFormation 中描述的容量提供程序 代码如下 CapacityProvider Type AWS ECS CapacityProvider Condi
  • 阻止父级仅获取某些视图的触摸事件?

    我有一个ScrollView以及里面的线性布局 在线性布局内我有多个视图 多个视图之一 DrawView 可以说 用于绘制东西 所以我必须覆盖onTouchEvent那种方法并画东西 目前 当我拖动或移动DrawView the Scrol
  • javac数据流分析的奇怪误报

    我有以下形式的代码 class Test private final A t public Test for final A u null t new A private class A 编译器说 variable t might alre
  • offsetof 可以与从 decltype 获得的结构类型一起使用吗?

    Can offsetof与通过获得的类型一起使用decltype 这两种情况中的任何一种都有效 C 11 吗 struct S int i int j offsetof decltype this i case 1 S i offsetof