定义一个空类型,里面没有任何成员变量和成员函数。对该类型求sizeof 结果?
2015-03-24 16:43
525 查看
结果为1 。为什么不是0?空类型实例中不包含任何信息,但是当我们声明该类型的实例的时候,它必须在内存中占有一定的空间,否则无法使用这些实例。至于占多少空间,由编译器决定。Visual Studio中每个空类型的实例占用1字节的空间。
如果在该类型中添加一个构造函数和析构函数,再对该类型求sizeof,得到的结果又是多少/
还是1.调用构造函数和析构函数只需要知道函数的地址即可,而这些函数的地址只与类型相关,而与类型的实例无关,编译器也不会因为这两个函数而在实例中添加任何额外的信息。
如果析构函数标记为虚函数呢?
C++编译器一旦发现一个类型中有虚函数,就会为该类型生成虚函数表,并在该类型的每一个实例中添加一个指向虚函数表的指针。在32位机器上,一个指针占4个字节的空间,因而sizeof得到4;如果是64位的机器,一个指针占8字节的空间,结果为8.
如果在该类型中添加一个构造函数和析构函数,再对该类型求sizeof,得到的结果又是多少/
还是1.调用构造函数和析构函数只需要知道函数的地址即可,而这些函数的地址只与类型相关,而与类型的实例无关,编译器也不会因为这两个函数而在实例中添加任何额外的信息。
如果析构函数标记为虚函数呢?
C++编译器一旦发现一个类型中有虚函数,就会为该类型生成虚函数表,并在该类型的每一个实例中添加一个指向虚函数表的指针。在32位机器上,一个指针占4个字节的空间,因而sizeof得到4;如果是64位的机器,一个指针占8字节的空间,结果为8.
相关文章推荐
- 当一个类A 中没有生命任何成员变量与成员函数,这时sizeof(A)的值是多少,如果不是零,请解释一下编译器为什么没有让它为零。
- VC++6.0中定义一个类的对象后,用“.”访问其成员函数和成员变量时,其成员函数和成员变量没有自动弹出
- C++定义一个类,如果成员变量没有说明是共有还是私有那默认的是哪一个?
- 定义一个哺乳动物Mammal类,再由此派生出狗Dog类,二者都定义 Speak()成员函数,基类中定义为虚函数,定义一个Dog类的对象,调用Speak函数,观察运行结果
- 如何在一个类中定义一个Friend类型的成员函数
- 递归:从尾到头输出链表& 从尾到头输出一个字符串 & 定义一个函数求字符串的长度,要求该函数体内不能声明任何变量
- 定义一个函数求字符串的长度,要求该函数体内不能声明任何变量
- C++定义一个类,如果成员变量没有说明是共有还是私有那默认的是哪一个?
- 类A 中没有生命任何成员变量与成员函数,sizeof(A)的值是1
- 定义一个函数求字符串的长度,要求该函数体内不能声明任何变量
- c++中定义一个全局变量,子函数修改变量后,主函数没有改变问题
- 定义一个函数求字符串的长度,要求该函数体内不能声明任何变量
- 定义一个函数求字符串的长度,要求该函数体内不能声明任何变量
- 定义一个包含私有成员变量和函数的类,再定义一个内部类,在内部类函数中访问外部成员变量,并调用外部函数。在外部类函数中创建内部类对象,调用内部类函数
- oracle的学习六:pl/sql基础(数据类型、定义变量)、游标、过程、函数、包、触发器(系统触发器)
- 一个Asp 类的模块(成员变量、成员函数、构造析构函数)
- 定义一个全局变量设初值为20,在page_load里面给其赋值为50,在别的按钮事件里面引用还是为20,怎么回事?
- 声明一个哺乳动物类Mammal,再由此派生出狗类Dog,二者都定义Speak()成员函数,基类中定义为虚函数,声明类Dog的一个对象,调用函数Speak()
- 宏定义函数指针类型&函数返回左值类值 1。宏定义不分配内存,变量定义分配内存。 2。宏名和参数的括号间不能有空格 3。宏替换只作替换,不做计算,不做表达式求解 //下面是正确的标准的写法 typedef int(FUNC1)(int in); ty
- 写一个函数返回1+2+3+…+n的值(假定结果不会超过长整型变量的范围)