为什么 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
。在这种情况下,是完全安全的。
我使用 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
。在这种情况下,是完全安全的。