如何在visual studio中编程时找到结构的大小

man*_*ans 8 c++ visual-studio-2012

我知道结构的大小在编译时是已知的,因此应该可以在编程期间找到结构的大小.我怎样才能做到这一点?

更具体:

我有一个结构说:

struct mystruct
{
    int a;
    char b;
    float c[100];
}
Run Code Online (Sandbox Code Playgroud)

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

int size=sizeof(mystruct);
cout<<"size is="<<size<<endl;
Run Code Online (Sandbox Code Playgroud)

但这涉及到我的应用程序添加一些代码并运行它.

有没有什么方法Visual Studio IDE可以帮助我找到这个结构的大小(例如通过将光标放在它上面并按一个键!)

Son*_*rds 6

给定一个类型 T,写出以下内容:

constexpr size_t sizeOfT = sizeof(T);
Run Code Online (Sandbox Code Playgroud)

将鼠标悬停在 上sizeOfT,您将看到结构的大小作为此 constexpr 的值。


MSa*_*ers 5

Intellisense可以告诉您这一点。例:

template <size_t S> class Sizer { };
int x;
Sizer<sizeof(x)> foo;
Run Code Online (Sandbox Code Playgroud)

如果将鼠标悬停在foo,它将显示4Ui64-的大小x为4。Ui64后缀是因为size_t是Unsigned,Integral和64位。由于它使用Intellisense,因此您无需编译代码。你可以把Sizer你的stdafx.h预编译头。

  • 我认为你的结构问题过于复杂化了。我通过输入“const static size_t Soul = sizeof(unsigned long);”并将鼠标悬停在“soul”上发现了这一点。但是,“4Ui64” - 感谢您的解释,我不明白。 (2认同)

Ste*_*eed 5

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

\n\n
int a[sizeof(std::string)] = 0;\n
Run Code Online (Sandbox Code Playgroud)\n\n

编译器会说:无法从 \'int\' 转换为 \'int [24]\'。这是24消息中您的尺码。

\n\n

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

\n\n
int a[sizeof(std::string)];\na = 0;\n
Run Code Online (Sandbox Code Playgroud)\n\n

错误:将 \xe2\x80\x98int\xe2\x80\x99 分配给 \xe2\x80\x98int [32]\xe2\x80\x99 时的类型不兼容

\n\n

(哎呀,编译器之间的 std::string 大小确实不同)

\n