提问人:fredoverflow 提问时间:2/20/2011 更新时间:2/18/2015 访问量:24253
const void的意义何在?
What's the point of 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
答:
没有。但是,忽略 void 上的 cv 限定或使它们出错可能会在编译器实现和最终用户代码方面造成不必要的复杂性。考虑像这样的模板
template<typename T>
const T ...
没有理由在这种情况下使用 void 成为一种特例(比现在更多),它只会让人头疼。
此外,虽然没有帮助,但有其用途。const void
const void*
评论
void*
string read_name(enum dynamic_type, const void*)
const void
void* const
T*
void*
const void*
const
const T*
const_cast
const T*
const void
之所以被允许,仅仅是因为没有必要让编译器踢出这个一般规则的例外,而且保留它也没有坏处。
上面有一些讨论不是很有用:const void*
const void * 有多大用处?我可以看到 * const 可能是多么虚无,但不是前者。——蜘蛛侠
事实上,有时是必不可少的。
它声明所指向的事物是仅读的,而不是仅声明指针本身是常量的,而不是它所指向的事物。const void*
void* const
根据我的经验,指向常量使用的指针是两种形式中更有用的。当然,这也意味着指针和它所指向的事物都是恒定的。const void*
const void* const
void*
通常用作传递非特定指针的一种方式(例如 with )。
如果你想将 a 传递给这样的函数,那么你就不能使用,或者你失去了它所指向的事物是恒定的并且不能改变的事实。当前的 C++ 编译器将拒绝编译它,因为它必须隐式丢弃,并且理所当然地这样做,因为这些数据可能位于只读内存中,并且如果有任何内容试图写入它,可能会导致异常。memcpy()
const char*
void*
const
这就是为什么第二个论点是,而不仅仅是.memcpy()
const void*
void*
评论
下一个:高效整数比较函数
评论
const
const
const void