const void是什么意思?

显然,可以声明一个返回const void的函数:

 const void foo() { } 

g ++似乎认为const重要的,因为下面的代码不能编译:

 #include <type_traits> static_assert(std::is_same<void(), const void()>::value, "const matters"); 

那么const void是否有什么实际意义呢?

不是真的。 但是要忽略无效的cv -qualifications或者使它们出错,可能会在编译器实现和最终用户代码方面造成不必要的复杂性。 考虑像模板

  template<typename T> const T ... 

在这种情况下没有理由使用void来处理特殊情况(比以前更多),这只会让人头疼。

另外,尽pipeconst void没有帮助,但是const void*有其用处。

const void是允许的,因为没有任何一点让编译器把这个例外抛到一个通用的规则上,并且没有任何伤害留下来。

上面有一些讨论, const void*不是很有用:

const void *有用吗? 我可以看到* const可能是多么的无用,但不是前者。 -Spidey

其实const void*有时是必不可less的。 它声明被指向的东西是只读的,而不是void* const ,它只声明指针本身是常量,而不是它指向的东西。

根据我的经验,使用const void*指针是两种forms中更有用的。 当然, const void* const意味着指针和它指向的东西都是常量。

void*通常用作传递非特定指针的方式(例如,使用memcpy() )。 如果你想传递一个const char*到这样的函数,那么你不能使用void*或者你失去了它指向的东西是常量而不能被改变的事实。 当前的C ++编译器会拒绝编译,因为它必须隐式地强制转换const ,所以这个数据可能在只读内存中,如果有东西试图写入,可能会导致exception。

这就是为什么memcpy()的第二个参数是const void*而不是简单的void*