在编译时打印 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) [重复] 的相关文章

随机推荐

  • 如何从 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它 在编译时 而不是经历在应用程序控制台或调试输出窗口中某处输出大小的漫