获取成员变量的大小
Getting the size of member variable
如果有一个 POD 结构,有一些成员变量,例如这样:
struct foo
{
short a;
int b;
char c[50];
// ...
};
有没有办法在不创建这种类型的对象的情况下获取成员变量的大小(以字节为单位)?
我知道这将起作用:
foo fooObj;
std::cout << sizeof( fooObj.a ) << std::endl;
std::cout << sizeof( fooObj.b ) << std::endl;
std::cout << sizeof( fooObj.c ) << std::endl;
编译器是否会优化以下内容并阻止对象的构造?
std::cout << sizeof( foo().a ) << std::endl;
你可以在
C++0x 中执行此操作:
sizeof(foo::a);
5.3.3/1:
运算符的大小产生数字 对象表示中的字节数 其操作数。操作数为以下任一 未计算的表达式, 或带括号的类型 ID。
以上意味着以下结构已明确定义:
sizeof( ((foo *) 0)->a);
请使用以下形式:sizeof(foo::a)
。
使用显而易见的:
sizeof( foo::a )
在C++中,sizeof 总是在编译时计算,因此没有任何运行时成本。
C++-0x 允许您执行以下操作:
std::cout << sizeof( foo::a ) << std::endl;
std::cout << sizeof( foo::b ) << std::endl;
std::cout << sizeof( foo::c ) << std::endl;
C++-0x 允许 sizeof 在没有显式对象的情况下处理类的成员。
论文在这里:扩展 sizeof 以应用于没有对象的非静态数据成员(修订版 1)
我在上面看到关于这个的帖子太晚了。 不好意思。
您可以创建@Erik建议的宏包装器:
#define SIZE_OF_MEMBER(cls, member) sizeof( ((cls*)0)->member )
然后将其用作:
cout << SIZE_OF_MEMBER(foo, c) << endl;
输出:
50
演示 : http://www.ideone.com/ZRiMe
struct foo
{
short a;
int b;
char c[50];
// ...
static const size_t size_a = sizeof(a);
static const size_t size_b = sizeof(b);
static const size_t size_c = sizeof(c);
};
用法:
foo::size_a
相关文章:
- 将成员变量添加到共享库中的类中,不会破坏二进制兼容性吗
- 具有奇怪重复模板模式的派生类中的成员变量已损坏
- C++预处理会生成变量成员、资源库和映射
- 局部堆栈变量成员的返回值优化
- Google Mock:在目标类的构造函数中实例化的模拟私有变量成员
- 使用指向结构变量成员的指针访问该结构的成员的地址
- 如果派生类仅包含自动变量成员,是否有必要具有虚拟驱动器
- 线程安全性和静态变量/成员功能
- "static const char array"可以在 C 语言上包含变量成员吗
- 仅用于内部目的的类的所有变量/成员的技术术语是什么
- 如何强制转换变量成员以将其作为函数的引用参数传递
- 类中未声明变量成员函数
- 在 main 中初始化类的 "static const" 类型变量成员的更好方法
- c++模板类静态const变量成员作为映射键给出未定义引用
- 在类中初始化结构变量成员会导致分割错误
- 在c++中建模变量成员类型
- 模板私有静态变量成员的未定义符号
- 不能访问公共静态变量成员
- 常量变量成员在C++有什么用?
- g++ 4.8.2坚持简单变量成员是数组