我尝试编译我的代码,但 charconv 头文件中的以下函数(即使它没有 .h 扩展名)无法编译,因为它们已在我使用的 Clang 版本中被删除:
void to_chars(char*, char*, bool, int = 10) = delete;
void from_chars(const char*, const char*, bool, int = 10) = delete;
有人知道为什么这些被删除吗?我的代码在 Visual Studio 下编译得很好,但在 Clang 下则不行。当我在 Visual Studio 中调用 to_chars 时,它会调用此函数:
_EXPORT_STD inline to_chars_result to_chars(char* const _First, char* const _Last, const float _Value) noexcept
但是在 Clang 中,调用解析为:
void to_chars(char*, char*, bool, int = 10) = delete;
有人知道发生什么事吗?
这无法在 Clang 上编译:
#include <charconv>
int main()
{
char str_buffer[512];
float value_to_convert = 7;
auto result = std::to_chars(str_buffer, str_buffer + 6, value_to_convert);
// Call to deleted function to_chars
}
clang 的默认标准库
libc++
花了很长时间才为浮点值实现 std::to_chars
,但仍然没有为它们实现 std::from_chars
。
std::to_chars
浮点类型应该从 clang-16 开始工作(godbolt)。
如果您需要使用这些函数,您可能需要链接不同的 C++ 标准库,例如
libstdc++
。