C++11 c+中模板类的大小是多少+;?

C++11 c+中模板类的大小是多少+;?,c++11,templates,C++11,Templates,以下代码的输出为16。为什么会这样?即使不使用类的数组长度初始化,大小也是16,使用第二个构造函数初始化长度,大小也是相同的,即16。有什么解释吗 #include <iostream> #include <string> using namespace std; template <class T> class array1{ T * arr; int l; public: array1(){ a

以下代码的输出为16。为什么会这样?即使不使用类的数组长度初始化,大小也是16,使用第二个构造函数初始化长度,大小也是相同的,即16。有什么解释吗

  #include <iostream>
    #include <string>
using namespace std;

template <class T>
class array1{
    T * arr;
    int l;
    public:
    array1(){
        arr = 0; l=0;
        }
    array1(int x){
        l = x;
        arr = new T[l];
    }
    ~array1(){
        delete[] arr;
        }
    void display(){
        cout << "array1 is :"<<endl;
        for (int i=0; i<l; i++)
        cout << arr[i] << " ";
        cout << endl;
    }

};

int main()
{
array1<int> a1;
cout << "size of int arr is " << sizeof(a1);
return 0;
}
#包括
#包括
使用名称空间std;
模板
类数组1{
T*arr;
int l;
公众:
数组1(){
arr=0;l=0;
}
阵列1(整数x){
l=x;
arr=新的T[l];
}
~array1(){
删除[]arr;
}
无效显示(){

cout您的类有两个成员变量。一个指针和一个int。我怀疑对于您的平台来说,这两个变量的大小都是8字节

如果是,那么:8+8=16


(您的类没有虚拟方法,因此没有vtable开销)。

您的类有两个成员变量。一个指针和一个int。我怀疑对于您的平台来说,这两个变量的大小都是8个字节

如果是,那么:8+8=16


(您的类没有虚拟方法,因此没有vtable开销)。

这是因为。在您的系统中,它与8字节的字对齐。打印
sizeof(T*)
sizeof(int)
它将在
数组
类的构造函数中分别输出
8
4
。但当一起输出时需要16个字节。

这是因为。在您的系统中,它与8个字节的字对齐。打印
sizeof(T*)
sizeof(int)
它将在
数组
类的构造函数中分别输出
8
4
。但当一起输出时需要16个字节。

看起来您的整数和指针类型都是8个字节/64位。而且,仅仅是一个平头,
sizeof
是一个编译时运算符,这意味着即使您的对象pe使用
运算符new[]
在堆上分配内存,
sizeof
仍将为
array1
类型的任何对象返回16字节


此外,无论
T
的类型是什么,
sizeof(array1)
始终是16字节(我假设您不是在非典型目标上编译)

看来您的整数和指针类型都是8字节/64位。而且,仅是一个平头,
sizeof
是一个编译时运算符,这意味着即使您类型的对象使用
运算符new[]在堆上分配内存
sizeof
仍将为
array1
类型的任何对象返回16字节


此外,无论
T
的类型是什么,
sizeof(array1)
始终是16字节(我假设您不是在非典型目标上编译)

这与模板无关,你在普通类中也会得到同样的结果。你能和我们分享一下你关于为什么应该是16以外的东西的假设吗?你期望什么?这与模板无关,你在普通类中也会得到同样的结果。你能和我们分享一下你关于为什么应该是16以外的东西的假设吗ng而不是16?你期望什么?既然你用C++11标记了这个问题,你也可以验证这个:
cout既然你用C++11标记了这个问题,你也可以验证这个:
cout