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*
。