C++11 c+中模板类的大小是多少+;?
以下代码的输出为16。为什么会这样?即使不使用类的数组长度初始化,大小也是16,使用第二个构造函数初始化长度,大小也是相同的,即16。有什么解释吗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
#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