我正在从Thinking in C ++一书中学习C ++。我不明白有一段代码。它是包含字符或整数数组的结构的成员函数。 add函数应该添加每个元素:char或int。
int Stach::add(const void* element){
int startBytes=next*size; //according to the book, next is the next space available and the size is the size of the space
unsigned char* e=(unsigned char*)element;
for(int i=0; i<size;i++)
storage[startBytes+i]=e[i];
next++;
return(next-1);// return index
}
我不明白的部分是什么是空间,空间的大小是多少?这本书没有解释它是什么。另外,我对
感到困惑unsigned char* e=(unsigned char*)element;
for(int i=0; i<size;i++)
storage[startBytes+i]=e[i];
我对该函数的理解是它复制,比如一个int,它一个字节地占用4个字节?我理解正确吗?我该如何解释
unsigned char* e=(unsigned char*)element;
非常感谢。
答案 0 :(得分:0)
C ++将所有程序存储器建模为字节数组(字符,无符号字符)。我们在法律上允许通过将指向该对象的指针转换为(通常unsigned
)char*
来逐字节地检查任何对象的表示。
这段代码正在做的是使用字节数组作为一种独立于类型的存储空间。当您调用add
时,它会将要添加的对象的字节表示复制到其内部字节数组storage
中。这就是人们如何在C中实现与类型无关的容器,但在C ++中完全不适合,即使是在2000年。