为什么 const void* 没有 std::free 重载?

Why there is no std::free overload for const void*?

我使用 returns 动态分配的外部 C 函数 const char*

我想用unique_ptr<const char, decltype(std::free)>来管理

但是没有 std::free(const void*) 重载所以我得到 invalid conversion from 'const void*' to 'void*' 并且必须使用 const_cast<char*>().

这只是标准库的缺陷还是背后有其他原因?

std::free继承自C标准库。 C 没有重载,因此无法继承 const 重载。

虽然 C++ 标准库已使用一些有用的重载扩展继承的 C 库,但尚未为 free 添加 const 重载。

要么从未考虑过这样的过载,要么认为没有必要将其添加到标准中。我没有遇到过任何公开可用的关于这样的添加的提案——尽管我没有阅读过所有的提案,也没有参加过任何委员会会议或研讨会,所以我不能否认存在这样一个选项的可能性文件.

要解决缺少此类重载的问题,您确实可以使用 const_cast。在这种情况下,是完全安全的。