首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在visual studio中编程期间找到结构的大小

如何在visual studio中编程期间找到结构的大小
EN

Stack Overflow用户
提问于 2014-07-16 07:51:21
回答 6查看 11.5K关注 0票数 11

我知道结构的大小是在编译时知道的,所以在编程时应该可以找到结构的大小。我该怎么做?

更具体而言:

我有一个结构上写着:

代码语言:javascript
运行
复制
struct mystruct
{
    int a;
    char b;
    float c[100];
}

我可以在代码中编写这一行并运行应用程序,并查看此结构的大小:

代码语言:javascript
运行
复制
int size=sizeof(mystruct);
cout<<"size is="<<size<<endl;

但这需要向我的应用程序添加一些代码并运行它。

有什么方法可以让帮助我找到这个结构的大小(例如,将光标放在它上并按一个键!)

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2014-07-16 08:57:39

Intellisense可以告诉你这个。示例:

代码语言:javascript
运行
复制
template <size_t S> class Sizer { };
int x;
Sizer<sizeof(x)> foo;

如果悬停在foo上,它将显示4Ui64 -- x的大小为4。Ui64后缀是因为size_t是无符号、整数和64位的。因为它使用Intellisense,所以不需要编译代码。您可以将Sizer放在stdafx.h预编译头中。

更新更容易使用变体,使用类模板参数演绎

代码语言:javascript
运行
复制
template <typename T, size_t = sizeof(T)> struct Sizer {
    Sizer(T)
};

int x;
Sizer foo(x);
票数 7
EN

Stack Overflow用户

发布于 2018-03-19 18:35:38

给定T类型,编写以下内容:

代码语言:javascript
运行
复制
constexpr size_t sizeOfT = sizeof(T);

鼠标移动到sizeOfT上,您将看到这个结构的大小是这个参数的值。

票数 10
EN

Stack Overflow用户

发布于 2018-11-19 14:57:15

这里有一个有用的技巧,简短而简单:

代码语言:javascript
运行
复制
int a[sizeof(std::string)] = 0;

编译器会说:不能从'int‘转换为'int 24’。这是消息中您的大小24

该技术使用了一个与编译器无关的事实,即在堆栈上创建的恒定大小数组有它们自己的类型,其签名包括数组大小。但是g++抛出一个“必须用大括号括起来的初始化器初始化数组”的消息,所以您必须用一个修改过的版本破解它:

代码语言:javascript
运行
复制
int a[sizeof(std::string)];
a = 0;

错误:“int”到“int 32”赋值中的不兼容类型

(oops,std::string大小在编译器之间确实不同)

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24775127

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档