0

我正在从《用 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];

我对这个函数的理解是它会逐字节地复制一个占用 4 个字节的 int?我理解正确吗?我该如何解释

unsigned char* e=(unsigned char*)element;

非常感谢。

4

1 回答 1

0

C++ 将所有程序存储器建模为字节数组(字符、无符号字符)。unsigned法律允许我们通过将指向该对象的指针转换为(通常)来逐字节检查任何对象的表示char*

这段代码所做的是使用一个字节数组作为一种与类型无关的存储空间。当您调用时add,它会将要添加的对象的字节表示复制到其内部字节数组中storage。这就是在 C 中实现与类型无关的容器的方式,但完全不适合 C++,即使在 2000 年也是如此。

于 2013-07-31T22:00:01.573 回答