我知道结构的大小是在编译时知道的,所以在编程时应该可以找到结构的大小。我该怎么做?
更具体而言:
我有一个结构上写着:
struct mystruct
{
int a;
char b;
float c[100];
}
我可以在代码中编写这一行并运行应用程序,并查看此结构的大小:
int size=sizeof(mystruct);
cout<<"size is="<<size<<endl;
但这需要向我的应用程序添加一些代码并运行它。
有什么方法可以让帮助我找到这个结构的大小(例如,将光标放在它上并按一个键!)
发布于 2014-07-16 08:57:39
Intellisense可以告诉你这个。示例:
template <size_t S> class Sizer { };
int x;
Sizer<sizeof(x)> foo;
如果悬停在foo
上,它将显示4Ui64
-- x
的大小为4。Ui64
后缀是因为size_t
是无符号、整数和64位的。因为它使用Intellisense,所以不需要编译代码。您可以将Sizer
放在stdafx.h
预编译头中。
更新更容易使用变体,使用类模板参数演绎
template <typename T, size_t = sizeof(T)> struct Sizer {
Sizer(T)
};
int x;
Sizer foo(x);
发布于 2018-03-19 18:35:38
给定T类型,编写以下内容:
constexpr size_t sizeOfT = sizeof(T);
鼠标移动到sizeOfT
上,您将看到这个结构的大小是这个参数的值。
发布于 2018-11-19 14:57:15
这里有一个有用的技巧,简短而简单:
int a[sizeof(std::string)] = 0;
编译器会说:不能从'int‘转换为'int 24’。这是消息中您的大小24
。
该技术使用了一个与编译器无关的事实,即在堆栈上创建的恒定大小数组有它们自己的类型,其签名包括数组大小。但是g++
抛出一个“必须用大括号括起来的初始化器初始化数组”的消息,所以您必须用一个修改过的版本破解它:
int a[sizeof(std::string)];
a = 0;
错误:“int”到“int 32”赋值中的不兼容类型
(oops,std::string大小在编译器之间确实不同)
https://stackoverflow.com/questions/24775127
复制相似问题