在编译时打印 sizeof(T) [重复]

2023-11-22

可能的重复:
是否可以在编译时打印出 C++ 类的大小?

我可以在编译时输出对象的大小吗?由于编译器在编译源文件时已经有了这些信息,我可以吗?see它(在编译时)而不是经历在应用程序控制台或调试输出窗口中某处输出大小的漫长过程?

这将非常有用,特别是当我能够编译单个源文件时,这可以在处理大型项目时节省大量时间。


是的。可能的重复打印尺寸为error消息,这意味着编译不会成功。

但是,我的解决方案将尺寸打印为warning消息,这意味着它将打印大小,然后编译将继续。

template<int N> 
struct print_size_as_warning
{ 
   char operator()() { return N + 256; } //deliberately causing overflow
};

int main() {
        print_size_as_warning<sizeof(int)>()();
        return 0;
}

警告信息:

prog.cpp: In member function ‘char print_size_as_warning<N>::operator()() [with int N = 4]’:
prog.cpp:8:   instantiated from here
prog.cpp:4: warning: overflow in implicit constant conversion

Demo : http://www.ideone.com/m9eg3

注意:警告消息中N的值为sizeof(int)的值


上面的代码是改进的,我的第一次尝试是这样的:

template<int N> 
struct _{ operator char() { return N+ 256; } }; //always overflow

int main() {
        char(_<sizeof(int)>());
        return 0;
}

警告信息:

prog.cpp: In member function ‘_<N>::operator char() [with int N = 4]’:
prog.cpp:5:   instantiated from here
prog.cpp:2: warning: overflow in implicit constant conversion

Demo : http://www.ideone.com/mhXjU

这个想法取自我之前对这个问题的回答:

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

在编译时打印 sizeof(T) [重复] 的相关文章

  • C++ std::accumulate 没有给出预期的总和

    double numbers 1 0 5 0 333333 0 25 0 2 0 166667 0 142857 0 125 0 111111 0 1 std vector
  • 为什么 std::vector 可以处理类定义中的不完整类型?

    出现了以下问题 C 标准似乎说 std vector需要一个完整的类型才能工作 看https en cppreference com w cpp container vector https en cppreference com w cp
  • 并行运行多个任务

    我有一个代理列表 每个代理都会访问不同的站点并从站点中提取所需的数据 目前它一次只做一个 但我希望同时运行 10 20 个任务 这样它就可以一次性从 20 个站点下载 而不是只下载一个 这是我目前正在做的事情 private async T
  • 来自 double 的 static_cast 可以优化分配给 double 吗?

    我偶然发现了一个我认为不必要的功能 并且通常让我感到害怕 float coerceToFloat double x volatile float y static cast
  • 如何使用T4从一个模板同时生成两个文件?

    我遇到的情况是 我需要生成两个 CSharp 代码文件 它们的代码几乎相同 但方法的输入和输出类型的命名空间不同 事实上 每个文件都针对特定国家 地区 并且类型来自特定国家 地区的 WSDL 我正在围绕服务编写一些包装器 逻辑完全相同 但从
  • C# 结构默认值

    我有一个方法 它接受一个包含许多具有基本数据类型的字段的结构 我想传递大部分默认值 但需要进行一些调整 但我了解结构声明中的基本字段不能包含默认值声明 例如struct S int a 42 现在是这样的 OptionsStruct opt
  • DateTime.ParseExact - 为什么 yy 变成 2015 而不是 1915

    为什么 NET 假定以下年份是 2015 年 而不是 1915 年 var d DateTime ParseExact 20 11 15 dd MM yy new CultureInfo en GB 我想 它会尝试接近 但其背后是否有合理的
  • 当我尝试传递临时地址作为参数时,它是一个 UB 吗?

    对于以下 C 代码 include
  • 如何从 Powerpoint 2010 导出电影?

    如何使用 MS Office PIA 主互操作程序集 或其他方式以编程方式将嵌入视频从 powerpoint 2010 导出到外部文件 在演示文稿中嵌入视频是 Powerpoint 2010 中的一项新功能 我找不到解决方案 PPTX 文件
  • 为什么连续抛出 2 个异常不会生成无法访问的代码警告?

    为什么以下代码行不会创建编译器警告 void Main throw new Exception throw new Exception 据我所知 编译器应该通知您无法到达第二个抛出异常 这显然是一个编译器错误 它是在 C 3 0 中引入的
  • main.cpp 是必需的吗?

    我试图编译一个程序cmake 我最终删除了我的main cpp文件 我刚刚将其复合到另一个包含我的项目名称的文件中 即 我刚刚将主函数剪切并粘贴到该文件中 问题是我有一个main cpp未发现错误 不确定是否在C 一个名为main cpp是
  • MINIX内部碎片2

    我正在用 C 语言编写一些软件 它递归地列出给定目录中的所有文件 现在我需要计算出内部碎片 我花了很长时间研究这个问题 发现 ext2 上的内部碎片只发生在最后一个块中 我知道理论上你应该能够从索引节点号获得第一个和最后一个块地址 但我不知
  • fgets溢出后如何清除输入缓冲区?

    当输入字符串超出其预定义限制时 我遇到了 fgets 的小问题 以下面的例子为例 for index 0 index lt max index printf Enter the d string index 1 if fgets input
  • 如何在VS2005中使用从.bat而不是.exe启动的外部程序进行调试?

    在我的 c 项目的调试属性中 我选择了 启动外部程序 并选择了我希望将调试器附加到的程序的 exe 但是 现在我需要从 bat 文件而不是 exe 启动程序 但 VS2005 似乎不允许这样做 这可能吗 编辑 为了澄清 我需要调试从 bat
  • 在 clang 中向量化函数

    我正在尝试根据此用 clang 对以下函数进行矢量化铿锵参考 http llvm org docs Vectorizers html 它采用字节数组向量并根据以下条件应用掩码this RFC https www rfc editor org
  • C++网络序列化[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找一种将 C 数据包序列化为网络流的解决方案 我在这里看到很多帖子提到人们 ACE 谷歌协议缓
  • 从单应性估计 R/T

    我一直在尝试计算 2 个图像中的特征 然后将这些特征传递回CameraParams R没有运气 特征已成功计算并匹配 但是问题是将它们传递回R t 我明白你必须分解Homography为了使这一点成为可能 我已经使用如下方法完成了 http
  • c++ - <未解析的重载函数类型>

    在我的班级里叫Mat 我想要一个将另一个函数作为参数的函数 现在我有下面 4 个函数 但是在调用 print 时出现错误 第二行给了我一个错误 但我不明白为什么 因为第一行有效 唯一的区别是功能f不是班级成员Mat but f2是 失败的是
  • 如何将模型绑定到动态创建的类 nancyfx

    首先感谢任何愿意查看我的问题的人 我对 Nancyfx 还很陌生 在尝试将 JSON 有效负载绑定到动态创建的类时遇到问题 我按照这篇文章中的代码动态创建了该类 在C 中动态创建一个类 https stackoverflow com que
  • 使用空的weak_ptr作为参数调用map::count安全吗?

    打电话安全吗map count http www cplusplus com reference map map count on an 未初始化因此为空weak ptr http en cppreference com w cpp mem

随机推荐

  • 如何从 Symfony2 服务类发送电子邮件?

    我可以成功使用以下代码从控制器发送电子邮件 message Swift Message newInstance gt setSubject Hello Email gt setFrom email protected gt setTo em
  • 我可以同时写入不同的切片元素吗

    我有一个包含要完成的工作的切片 还有一个包含完成所有操作后的结果的切片 下面是我的大致流程的一个草图 var results make Result len jobs wg sync WaitGroup for i job range jo
  • javascript中的延迟/睡眠?

    有没有一种简单的方法可以在 Javascript 中暂停脚本 我正在寻找相当于的javascripttime sleep 1 在Python中 我不想setTimeout continueExecution 10 或任何与getTime 这
  • 如何在SQL语句中使用ASP变量

    postit是变量 这response write有效 这一切都在下面的 SQL 语句之上 这是 SQL 但是当我添加postit变量我收到此错误消息 delCmd CommandText DELETE FROM post WHERE po
  • Material-ui 中断点属性(xs、sm、md...)的布尔值的用途是什么

    我正在努力寻找文档 或通过代码实验得到的结果 将布尔值作为 Material ui 中网格组件的断点道具值的目的是什么 咨询网格 API 文档显示布尔值是断点属性 lg md sm xl xs 的有效值 我明白如果我说sm 3 一旦显示宽度
  • Postgresql:在不同客户端中查询速度慢 10 倍

    查看 postgres 服务器日志 我发现从 Linux 客户端或 Windows 客户端调用时 同一 postgres 服务器上完全相同的查询需要更长的时间 大约长 10 倍 这些查询来自在具有 4GB RAM 的 Linux 计算机和具
  • Haskell 解析器到 AST 数据类型、赋值

    我已经在互联网上搜索了几天 试图找到我的问题的答案 但我最终承认失败 我得到了语法 Dig 0 1 2 3 4 5 6 7 8 9 Int Dig Dig Int Var a b z A B C Z Expr Int Expr Expr E
  • 如何将 URL 添加到 Internet Explorer 中的受信任区域?

    如何将 URL 添加到受信任的站点 好像是存储在注册表里的 但是具体在哪里呢 到目前为止我用谷歌搜索的提示没有帮助 net 程序将在每个客户端上本地运行 编辑说明 我想以编程方式运行 C 代码来执行此操作 以下应该为您提供在代码中执行此操作
  • 将参数传递给自定义 save() 方法

    如何将参数传递给我的自定义保存方法 保留正确的 args kwargs传递给 super 方法 我正在尝试类似的事情 form save my value and def save self my value None args kwarg
  • 如何在日期字段中仅插入年份和月份?

    我有一个专栏叫table date目前我正在使用now 插入当前日期 2011 02 23 我知道我可以用 sql php 操作它来显示年份和月份名称 但是 我想知道是否可以直接插入table date当前日期为年月 如下所示2011 02
  • Java继承-调用超类方法

    假设我有以下两个课程 public class alpha public alpha some logic public void alphaMethod1 some logic public class beta extends alph
  • 如何使用 oracle 创建一个带有小字符的表?

    如何使用 oracle 创建一个带有小字符的表 当我创建带有小字符的表时 它会自动将其转换为大写字符 ANSI SQL 标准要求将 不带引号的 表名折叠为大写 You can使用带引号的标识符创建小写名称的表 和列 同样遵循 SQL 标准
  • 在 Flutter 中绘制 SVG 并与之交互

    我们正在开发一个基于 SVG 输入显示人体的应用程序 人体分为几个区域 例如头部 左臂 右臂 腹部等 我们希望当用户单击例如一只手臂时突出显示图像的某个区域 在 Flutter 中实现这样的事情的最佳方法是什么 我们尝试使用 Flare f
  • 如何在 flutter 中刷新 Navigator.Pop 或 Push 上的状态

    这里我首先有两个页面叫做BSP signup terms页 第二个是Bsp Service page 当我在BSP signup terms在该页面上 我必须根据所选复选框选择一些复选框 它将显示一些数据 但问题是它会向我显示完整的数据 但
  • 具有多个记录路径的 json_normalize

    我正在使用中给出的示例json normalize此处给出的文档pandas json normalize pandas 1 0 3 文档 不幸的是 我无法粘贴我的实际 JSON 但这个示例有效 从文档粘贴 data state Flori
  • void(U::*)(void) 是什么意思?

    我正在研究该实施is classBoost 中的模板 并遇到了一些我无法轻易破译的语法 template
  • 如何从git获取Chromium指定标签版本的代码?

    我只需要指定版本的 Chromium 代码 例如 r69297 这是 Chrome 的最新开发版本 我使用 git 所以我按照这里的说明进行操作 http code google com p chromium wiki UsingGit但是
  • 在 JavaFX 中使用 Unicode 字符

    我已经玩了一段时间的 swing 现在决定看看 FX 到目前为止 我发现与 swing 相比 它更容易 更有趣 但我遇到了一个小减速带 经过几个小时的环顾 我只是找不到解决方案 当我尝试通过 fxml 文件添加它时 我无法使用 u如果我不使
  • 等待特定条件时通过WebDriver刷新网页

    我正在寻找更优雅的方式在测试期间刷新网页 我使用 Selenium2 我只是发送 F5 键 但我想知道驱动程序是否有刷新整个网页的方法 这是我的代码 while driver findElements By xpath text READY
  • 在编译时打印 sizeof(T) [重复]

    这个问题在这里已经有答案了 可能的重复 是否可以在编译时打印出 C 类的大小 我可以在编译时输出对象的大小吗 由于编译器在编译源文件时已经有了这些信息 我可以吗 see它 在编译时 而不是经历在应用程序控制台或调试输出窗口中某处输出大小的漫