std::from_chars解析int8_t类型二进制字符串的Bug问询
std::from_chars解析二进制字符串到int8_t的异常问题
当以二进制(base=2)格式将字符串解析为int8_t类型时,std::from_chars会触发错误,而std::stoi却能正常完成解析。以下程序的两个代码块解析同一二进制字符串,第二个代码块中的第一个断言会调用std::abort终止程序,std::stoi则无异常抛出。
编译命令
g++ -std=c++17 -O0 -g main.cc -o main
程序代码
// Compile: g++ -std=c++17 -O0 -g main.cc -o main #include <string> #include <cassert> #include <charconv> #include <cstdint> int main() { { std::string bits = "10011100"; int base = 2; std::int8_t num = std::stoi(bits.c_str(), nullptr, base); assert(num == -100); } { // std::from_chars在类型为int8_t且base=2时存在问题 std::string bits = "10011100"; int base = 2; std::int8_t num; auto [ptr, ec] = std::from_chars(bits.data(), bits.data() + bits.size(), num, base); assert(ec == std::errc()); // 触发std::abort assert(num == -100); } }
运行输出
# ./main main: main.cc:24: int main(): Assertion `ec == std::errc()' failed. Aborted
内容的提问来源于stack exchange,提问作者laprogrammer
相关产品推荐
相关产品推荐

