![](/img/trans.png)
[英]Why is const char[] a better match for std::ranges::range than for an explicit, const char* free overload, and how to fix it?
[英]Why there is no std::free overload for const void*?
我使用一個extern C函數,該函數返回動態分配的const char*
。
我想使用unique_ptr<const char, decltype(std::free)>
來管理它。
但是沒有std::free(const void*)
重載,所以我invalid conversion from 'const void*' to 'void*'
const_cast<char*>()
invalid conversion from 'const void*' to 'void*'
,必須使用const_cast<char*>()
。
這僅僅是標准庫的不完善之處,還是背后有其他問題?
std::free
繼承自C標准庫。 C沒有重載,因此不能繼承const
重載。
盡管C ++標准庫通過一些有用的重載擴展了繼承的C庫,但尚未free
添加const
重載。
從未考慮過這種過載,或者認為沒有足夠的過載以保證將其添加到標准中。 我還沒有遇到任何公開的提議來添加這樣的內容-盡管我還沒有閱讀過所有提議,也沒有參加任何委員會會議或研討會,所以我不能否認存在這種提議的可能性。文獻。
要解決缺少這種重載的問題,您確實可以使用const_cast
。 在這種情況下,它是完全安全的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.