C++ 为什么sizeof不关心函数?
给定以下内容,您将看到x和y的大小相同,但y有一个附加函数。sizeof中包含哪些内容,哪些内容不包含C++ 为什么sizeof不关心函数?,c++,C++,给定以下内容,您将看到x和y的大小相同,但y有一个附加函数。sizeof中包含哪些内容,哪些内容不包含 struct x { double a; double b; double c; double d; }; struct y { double a; double b; double c; double d; y(double q, double r, double s, double t) : a(q), b(r), c
struct x
{
double a;
double b;
double c;
double d;
};
struct y
{
double a;
double b;
double c;
double d;
y(double q, double r, double s, double t) : a(q), b(r), c(s), d(t) {};
};
std::cout << sizeof(x)-sizeof(y) <<std::endl;
sizeof中包含哪些内容,哪些内容不包含
struct x
{
double a;
double b;
double c;
double d;
};
struct y
{
double a;
double b;
double c;
double d;
y(double q, double r, double s, double t) : a(q), b(r), c(s), d(t) {};
};
std::cout << sizeof(x)-sizeof(y) <<std::endl;
sizeof只包括必须作为类型的每个实例的一部分存储在内存中的内容。对于类或结构,它返回需要为实例分配的内存量
因为函数对于struct y的每个实例都是相同的,所以它不是作为结构的一部分存储的-在那里定义它只允许函数作为结构上的方法调用。但是,如果它是函数指针,那么指针将是结构的一部分,并且会影响其大小
5.3.3尺寸[expr.Sizeof]
1Sizeof运算符在其操作数的对象表示形式中生成字节数。操作数为
表达式(它是未赋值的操作数子句5)或Aparenthesised type-id
运算符不应用于具有函数或不完整类型的表达式,也不应用于枚举
在声明其所有枚举数之前,其基础类型未固定到括号中的类型
此类类型的名称,或指定位字段的toa glvalue。sizeofchar、sizeofsigned char和
sizeofunsigned字符为1。适用于任何其他基本类型3.9.1的sizeof结果为
实现定义。[注:特别是sizeofbool、sizeofchar16_t、sizeofchar32_t和
sizeofwchar\u t是实现定义的。75-结束注释][注:字节的定义见1.7
和3.9中的对象表示定义。-结束注释]
2应用于引用或引用类型时,结果为引用类型的大小。应用时
对于一个类,结果是该类对象中的字节数,包括该类所需的任何填充
将该类型的对象放置在数组中。amost派生类的大小应大于0 1.8。
将sizeof应用于基类子对象的结果是应用时基类类型的大小。76
对于数组,结果是数组中的总字节数。这意味着数组的大小为n
元素的大小通常是元素的大小。
3 sizeof运算符可以应用于指向函数的指针,但不能直接应用于函数。
<>在C++中,没有一个明智的实现会在对象实例中存储函数的机器代码的冗余拷贝;这不仅是对空间的巨大浪费,我所知道的大多数体系结构都不允许以这种方式将机器代码与数据混合,因此它不会影响对象表示的大小。y不是虚拟的吗?数据成员会影响结构的大小,因为每个结构实例都有自己的补充;普通函数成员没有,因为每个结构类型只有一个,并且它不包含在结构中。成员函数可以被视为几乎与以类类型引用为第一个参数的自由函数相同。假设您有一个100个结构y的数组。这个函数需要100份编译后的代码吗?@walter:。。。