相关疑难解决方法(0)

为什么C++中空类的大小不为零?

可能重复:
C++:空类对象的大小是多少?

为什么以下输出1

#include <iostream>

class Test
{
};

int main()
{
    std::cout << sizeof(Test);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

c++ sizeof

74
推荐指数
4
解决办法
5万
查看次数

为什么没有成员变量的C++类占用空间?

我发现MSVC和GCC编译器每个类实例至少分配一个字节,即使该类是没有成员变量的谓词(或只有静态成员变量).以下代码说明了这一点.

#include <iostream>

class A
{
public:
   bool operator()(int x) const
   {
      return x>0;
   }
};

class B
{
public:
   static int v;
   static bool check(int x)
   {
      return x>0;
   }
};

int B::v = 0;

void test()
{
   A a;
   B b;
   std::cout << "sizeof(A)=" << sizeof(A) << "\n"
             << "sizeof(a)=" << sizeof(a) << "\n"
             << "sizeof(B)=" << sizeof(B) << "\n"
             << "sizeof(b)=" << sizeof(b) << "\n";
}

int main()
{
   test();
   return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出:

sizeof(A)=1
sizeof(a)=1
sizeof(B)=1 …
Run Code Online (Sandbox Code Playgroud)

c++ class predicate sizeof

52
推荐指数
3
解决办法
6869
查看次数

什么是std :: pair?

什么是std::pair,为什么我会使用它,以及boost::compressed_pair带来什么好处?

c++ boost stl std-pair

42
推荐指数
4
解决办法
4万
查看次数

一个类或对象的"sizeof"可以为零吗?

我们都知道空类的大小或空类的对象将是1个字节.我遇到了sizeof一个类及其对象变为0的东西.该程序在语法上是正确的,因为没有编译或运行时错误.这是未定义的行为吗?我试图执行的用例有意义,看起来像一个有效的用例?不给类中的数组提供精确的下标或大小是一个很大的错误吗?代码段如下:

#include<iostream>
using namespace std;
class A
{
   char a[];
};
int main()
{
    A b;
    cout<<sizeof(A)<<endl;
    cout<<sizeof(b)<<endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出:

0

0

sizeof一个空类是一个字节(非零基本)和其中的原因是说,像"为了确保不同的对象有不同的地址."

在这种情况下会发生什么sizeof呢?当班级来零时?注意:也观察到相同的行为int a[].

c++ class object

20
推荐指数
2
解决办法
1638
查看次数

在C++,java中空类的大小是多少?

C++和Java中空类的大小是多少?为什么不是零? sizeof();在C++的情况下返回1.

c++ java empty-class

14
推荐指数
2
解决办法
1万
查看次数

C中的空结构

我有一个没有成员的结构(目前),我想知道是否有可能抑制我得到的警告:

warning: struct has no members
Run Code Online (Sandbox Code Playgroud)

是否可以添加成员并保持sizeof结构为零?还有其他方法吗?

c struct warnings

12
推荐指数
5
解决办法
3万
查看次数

C++类的大小

这是打印不同类的大小的代码

#include <iostream>

using namespace std;

class EmptyClass
{    
};

class AbstractClass
{
  public: 
          virtual void funcOne() = 0;
          virtual void funcTwo() = 0;
};

class NotAbstrClass
{
  public: int virtFunc( int );
};

class MixClass
{
  public:
          virtual void clFunc( int );
          static int i;
          int j;
};

int main()
{
    // Print size of class or class objects
    cout<<"Size of empty class: "<< sizeof(EmptyClass)<<endl;          
    cout<<"Size of Abstract class :"<< sizeof(AbstractClass)<<endl;
    cout<<"Size of Non Abstract class: "<< sizeof(NotAbstrClass)<<endl;
    cout<<"Size …
Run Code Online (Sandbox Code Playgroud)

c++ class object sizeof

10
推荐指数
2
解决办法
2万
查看次数

关于C++虚拟继承的问题

以下代码来自"Inside the C++ object model"一书

#include <iostream>  
using namespace std;
class X{};
class Y: public virtual X{};
class Z: public virtual X{};
class A: public Y, public Z{};

int main()
{
     cout<<sizeof(X)<<" "<<sizeof(Y)<<" "<<sizeof(Z)<<" "<<sizeof(A)<<endl;
     return 0;
}
Run Code Online (Sandbox Code Playgroud)

在我的电脑(Windows,VS2010)中,输出为:

1 4 4 8

这是我的问题

1,sizeof(X)= 1

该书说当X类型生成两个实例时,比如说xa和xb.编译在A中插入一个字节,以便xa和xb可以有不同的地址.我不太明白原因.

2,sizeof(Y)= 4

通过使用虚拟继承,我们还有一个额外的虚拟指针吗?我想这可能与多态中的虚拟指针不同.任何人都可以给我Y的内存布局吗?

谢谢!

c++ virtual inheritance

9
推荐指数
1
解决办法
578
查看次数

带有'this'指针的类的大小

没有数据成员的类的大小返回为1个字节,即使声明了隐含的"this"指针.返回的大小不应该是4个字节(在32位机器上)?我遇到过一些文章,表明"this"指针不计算用于计算对象的大小.但我无法理解这个原因.此外,如果任何成员函数声明为virtual,则类的大小现在返回为4个字节.这意味着计算vptr以计算对象的大小.为什么在计算对象大小时会考虑vptr并忽略'this'指针?

c++ sizeof

7
推荐指数
1
解决办法
3939
查看次数

Sizeof空类

随着代码:

#include <iostream>

class A {};
class B { char x; };

int main()
{
    std::cerr << sizeof(A) << " " << sizeof(B) << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

我知道要问一个空课的大小是一个常见的面试问题 - 我知道答案是一个.

我的问题是......在一个空类的"1"字节中保存了什么(我猜它是空的),编译器在内部做了什么来使它sizeof Bsizeof A这种情况相同?

我想完全理解它,而不仅仅是知道答案.

c++

7
推荐指数
1
解决办法
2018
查看次数

标签 统计

c++ ×9

sizeof ×4

class ×3

object ×2

boost ×1

c ×1

empty-class ×1

inheritance ×1

java ×1

predicate ×1

std-pair ×1

stl ×1

struct ×1

virtual ×1

warnings ×1