摘自编程语言语用学,作者:Scott
For systems programming, or to facilitate the writing of general-purpose con- tainer (collection) objects (lists, stacks, queues, sets, etc.) that hold references to other objects, several languages provide a universal reference type. In C and C++, this type is called void *. In Clu it is called any; in Modula-2, address; in Modula-3, refany; in Java, Object; in C#, object.
在 C 和 C++ 中,void *
如何作为通用引用类型工作?
void *
始终只是指针类型,而通用引用类型包含所有值,包括指针和非指针。所以我看不出 void *
是如何成为通用引用类型的。
谢谢。
最佳答案
void*
指针通常会保存任何不是 C++ 成员指针的指针。在实践中这很不方便,因为您需要将其转换为另一种指针类型才能使用它。您还需要将其转换为与转换为 void*
时所用的指针类型相同的指针类型,否则您将面临未定义行为的风险。
一个很好的例子是 qsort
function 。它采用 void* 指针作为参数,这意味着它可以指向任何内容的数组。您传递给 qsort
的比较函数必须知道如何将两个 void*
指针转换回数组元素的类型,以便对它们进行比较。
关于c++ - void* 作为通用引用类型如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45846121/