0

本 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];

関数についての私の理解は、4バイトを占めるintをバイトごとにコピーするということですか?私はそれを正しく理解していますか?どう解釈するか

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

どうもありがとう。

4

1 に答える 1

0

C++ は、すべてのプログラム メモリをバイト配列 (文字、符号なし文字) としてモデル化します。unsignedオブジェクトへのポインターを (通常は)にキャストすることにより、オブジェクトの表現をバイト単位で検査することが合法的に許可されていますchar*

このコードが行っていることは、一種のタイプに依存しないストレージ スペースとしてバイト配列を使用することです。を呼び出すとadd、追加するオブジェクトのバイト表現が内部のバイト配列にコピーされますstorage。これは、型に依存しないコンテナを C で実装する方法ですが、2000 年になっても C++ にはまったく不適切です。

于 2013-07-31T22:00:01.573 に答える