c++ - void* 作为通用引用类型如何工作?

标签 c++ c types

摘自编程语言语用学,作者: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/

相关文章:

c++ - in_degree 函数的问题

C++ 编译器在实例化之前解析模板?为什么?

c++ - 如何使用 Boost::Asio 访问 Web 服务?

c++ - 修改字符串的长度和内容?

c - C 预处理器的对面 "stringification"

c# - C# 中的泛型,使用变量类型作为参数

optimization - 如何通知优化器 NonZeroU32::get 永远不会返回零?

c - 如何从 TCP header 打印序列和确认号

连接 char 数组和 char

sql - Linq2Sql 中的 System.DateTime 和 Sql datetime2(使用 sqlmetal)