gpt4 book ai didi

c++ - 在 C++ 中为具有默认参数的类查找模板的大小

转载 作者:行者123 更新时间:2023-11-30 01:47:34 24 4
gpt4 key购买 nike

我对此的疑问是为什么计算 b 的大小时输出为 8 个字节(我机器上 int 的大小为 4 个字节)。不应该是 4(对于 int)+ 1(对于 char;设置为默认值)吗?此外,当我在模板声明中指定多个默认参数时,确定大小的标准是什么?

#include<iostream>
using namespace std;
template<class T, class U = char> class A
{
public:
T x;
U y;
};
int main()
{
A<char> a;
A<int> b;
cout<<sizeof(a)<<endl;
cout<<sizeof(b)<<endl;
return 0;
}

输出是:

 2
8

最佳答案

由于硬件限制,大小为 N > 1 的对象可能必须放置在某个地址步长 A 的倍数的内存地址中,该步长大小取决于 N,但通常为 2、4、8 或 16。这称为对齐。由于一个值​​总是可以从它的各个字节重构,可以在任何地址访问,这只是效率问题,但如果支持错误对齐,效率损失可能是巨大的。

为了支持对齐,编译器填充结构,以便在这样的结构序列中,例如在数组中,每个结构都可以接受对齐,前提是第一个是。

在您的情况下,不会填充具有两个 char 值(字节)的结构,因为可以在任何地址有效地访问这些值。但是具有 int 的结构被填充,以确保 int 始终以可接受的对齐方式结束。特别是在这样的结构数组中。


最后一个问题

Moreover what is the criteria for determining size when I am specifying multiple default arguments in template declaration?

... 模板参数的默认设置与 wrt 完全无关。尺寸。

关于c++ - 在 C++ 中为具有默认参数的类查找模板的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31444138/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com