C ++标准库中的参数类型

时间:2011-11-12 02:33:45

标签: c++ pointers c++-standard-library

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

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

还有使用char *作为参数的函数,例如read类的ifstream函数,其原型是:

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

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

1 个答案:

答案 0 :(得分: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*
}