1

我注意到一些标准库函数使用 void* 作为参数,例如memcpy函数,它的原型是:

void * memcpy ( void * destination, const void * source, size_t num );

也有以char*为参数的read函数,例如class的函数ifstream,其原型为:

istream& read ( char* s, streamsize n );

为什么标准库不统一这些参数,比如全部使用char* 或者全部使用void*。有什么特别的原因吗?

4

1 回答 1

2

指针可以隐式转换为void*,但不能char*。这会导致类型安全 - 如果您关心类型,请不要使用void*.

由于memcpy设计用于处理它使用的指针类型void*read并非设计用于所有指针类型,因此它使用char*

void foo(void* x) {}
void bar(char* x) {}

int main() {
  int* x;
  foo(x);
  bar(x); // error - can't convert int* to char*
}
于 2011-11-12T02:38:14.387 回答