struct-sizeof() 如何得到C++类/结构中成员所占空间大小???

问题描述

sizeof() 如何得到C++类/结构中成员所占空间大小???

!!!!请勿答非所问 !!!!!

简要如下:

struct XXX
{
....
...
char strname[****];
...

void funxx()
{
int iix = sizeof(strname);//这里没问题,问题在下面
}
};

int main()
{

XXX var;
int iix2 = sizeof(var.strname);//这也可以,

//问题在这里,如何不创建类的实例,也不在类的函数中得到成员空间大小 !!!

int iix = sizeof(XXX::strname);//VC6编译错误,为何????,如何解决???

解决方案

1.sizeof不是函数,在编译的时候,编译器就求出了对应数据结构的大小。
2.至于是否支持sizeof(XXX::strname),完全取决于编译器,在早期的c++中是不支持的,现在已经支持了。

解决方案二:

使用sizeof计算类对象所占空间大小

解决方案三:

运算符sizeof,参数是基本类型,类或结构的名称,sizeof(int),sizeof(classname), sizeof(structname);
使用变量作为sizeof也是可以的,因为编译器实际上已经知道变量的类型。
使用数组作为sizeof也是可以的.

解决方案四:

可以在类中把strname定义为静态地static 这样就可以用类名访问。即可求出sizeof(var.strname)大小。

解决方案五:

收贴。

楼上所言极是

用icl测试了下,通过。

是编译器的问题。

解决方案六:

#if 1
#include
using namespace std;

int main()
{
int a = 0;
sizeof(int);
//sizeof int; 报错
sizeof a;
sizeof(1);
sizeof 2;
return 0;
}
#endif

时间: 2024-09-09 23:11:56

struct-sizeof() 如何得到C++类/结构中成员所占空间大小???的相关文章

sizeof-C#中如何计算类占空间大小??

问题描述 C#中如何计算类占空间大小?? C#中如何计算类占空间大小?? 我用sizeof不行 用using System.Runtime.InteropServices;的Marshal.SizeOf(p)报异常. 解决方案 C# 能否获取一个对象所占内存的大小? 今日,在项目重构的时候忽然想到一个问题,一个类哪些成员的增加,会影响一个类所占内存的大小?C#有没有办法知道一个对象占多少内存呢? 第一个问题:很快想到是类的非静态的字段.属性. 第二个问题:首先想到的是sizeof(). 下面开始

PHP中如何定义类及其成员属性与操作

 类的概念:类是具有相同属性和操作的一组对象的集合.它为属于该类的所有对象提供了统一的抽象描述,其内部包括属性和操作两个主要部分.在面向对象的编程语言中,类是一个独立的程序单位,它应该有一个类名并包括属性说明和操作说明两个主要部分. 1.类的定义: i. 类的关键字定义使用class 1.定义一个空类 Class Person{}; 2.定义一个有成员属性和操作的类 Class Person{ 成员属性........ 操    作........ } 3.定义一个不能被继承的类,使用final

类的成员

类的成员可以分为两大类:类本身所声明的,以及从基类中继承而来的. 类的成员有以下类型: ●成员常量,代表与类相关联的常量值. ●域,即类中的变量. ●成员方法,复杂执行类中的计算和其它操作. ●属性,用于定义类中的值,并对它们进行读写. ●事件,用于说明发生了什么事情. ●索引指示器,允许象使用数组那样为类添加路径列表. ●操作符,定义类中特有的操作. ●构造函数和析构函数,分别用于对类的实例进行初始化和销毁. 包含有可执行代码的成员被主食库是类中的函数成员,这些函数成员有方法.属性.索引指示器

C#中对类的成员的访问

在编写程序时,我们可以对类的成员使用不同的访问修饰符,从而定义它们的访问级别. 公有成员 C#中的公有成员提供了类的外部界面,允许类的使用者从外部进行访问.公有成员的修饰符为public,这是限制最少的一种访问方式. 私有成员 C#中的私有成员仅限于类中的成员可以访问,从类的外部访问私有成员是不合法的.如果在声明中没有出现成员的访问修饰符,按照默认方式成员为私有的.私有成员的修饰符为private. 保护成员 为了方便派生类的访问,又希望成员对于外界是隐藏的,这时可以使用protected修饰符

使非MFC窗口程序的窗口回调过程成为C++类的成员函数

一直以来,编写非MFC下的窗口程序,都习惯把窗口过程及消息处理函数编写成全局函数.为了把窗口回调过程及窗口消息处理函数封装成C++窗口类的成员函数,于是我编写了抽象类CWndProc: 一.头文件 //wndpro.h #ifndef __WNDPROC_H__ #define __WNDPROC_H__ class CWndProc { protected: //保护的构造函数,必须由派生类来构造. CWndProc(); virtual ~CWndProc(); protected: //窗

数据类型-350100198505020035 在c++中作为类的成员应该作为什么类型

问题描述 350100198505020035 在c++中作为类的成员应该作为什么类型 数据类型 350100198505020035 在c++中作为类的成员应该作为什么类型 解决方案 身份证,应该用字符串.因为这看上去是数字,但是其实和姓名一样,只是表示一个值,不需要数字计算. 解决方案二: 身份证号是可以分开的350100-19850502-0035这三个字段都是有意义的,如果是单独存储,不拿来用那就直接按楼上说的用字符串存储. 如果需要提取地区信息,出生年月信息以及验证身份证号,那我建议你

c++的问题-关于类的成员变量指向在堆上的对象的选择:指针/auto_ptr<>/shared_ptr<> ?

问题描述 关于类的成员变量指向在堆上的对象的选择:指针/auto_ptr<>/shared_ptr<> ? 在堆上的对象作为一个类的一个成员变量,我了解到的至少有三种方式(如下所示): class A{ } class B{ A* m_pA1; auto_ptrm_pA2: shared_ptrm_pA3: } B::B():m_pA1(new A)m_pA2(auto_ptr(new A))m_pA3(shared_ptr(new A)){ } 针对这三种方案,在什么情况下选择哪

python中如何对类的成员函数开启线程?

问题描述 python中如何对类的成员函数开启线程? 单独对某个函数开启线程是可以的,比如下面的代码: import threading import thread import time def doWaiting(): print 'start waiting:', time.strftime('%H:%M:%S') time.sleep(3) print 'stop waiting', time.strftime('%H:%M:%S') thread1 = threading.Thread

c#-C#点击按钮改变类的成员变量的值

问题描述 C#点击按钮改变类的成员变量的值 我在类里面定义了一个成员变量n,想用点击按钮来改变它的值,在按钮方法里面实现了,但是再在其他方法里面将n赋给其他变量的时候却不能实现. 解决方案 肯定也是可以实现的 比如 public void Foo(int a){ this.n=a; } 你调用这个方法不可能n的值不变吧? 解决方案二: 估计是你的对象是私有的,或者你在其它方法访问的时候又创建了一个.你可以把对象定义成static形式看看. 解决方案三: 总之就是 xxxx.n = xxx 解决方