如何通过std::ratio实现编译时单位转换且实现零开销常量计算?

2026-05-06 19:040阅读0评论SEO资讯
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1143个文字,预计阅读时间需要5分钟。

如何通过std::ratio实现编译时单位转换且实现零开销常量计算?

它不是运行时工具,而是编译期有理数类型模板——`std::ratio`。

常见错误是把它当普通数值用:auto r = std::ratio{} * 1000; —— 错,std::ratio 没重载 * 运算符,也不能和整数直接运算;它只参与类型计算,不参与值计算。

  • 必须配合 std::ratio_addstd::ratio_multiply 等元函数操作类型
  • 最终要靠 std::ratio<N,D>::numstd::ratio<N,D>::den 取出编译期常量
  • 所有输入必须是字面量整型常量(constexpr),不能是变量或运行时读入的值

怎么把毫秒转纳秒?用 std::ratio_multiply 搭配 std::nano

标准库已定义好常用单位:比如 std::millistd::ratio<1, 1000>std::nanostd::ratio<1, 1000000000>。毫秒→纳秒本质是乘以 1000000,即 milli / nano 的比值。

阅读全文
标签:C

本文共计1143个文字,预计阅读时间需要5分钟。

如何通过std::ratio实现编译时单位转换且实现零开销常量计算?

它不是运行时工具,而是编译期有理数类型模板——`std::ratio`。

常见错误是把它当普通数值用:auto r = std::ratio{} * 1000; —— 错,std::ratio 没重载 * 运算符,也不能和整数直接运算;它只参与类型计算,不参与值计算。

  • 必须配合 std::ratio_addstd::ratio_multiply 等元函数操作类型
  • 最终要靠 std::ratio<N,D>::numstd::ratio<N,D>::den 取出编译期常量
  • 所有输入必须是字面量整型常量(constexpr),不能是变量或运行时读入的值

怎么把毫秒转纳秒?用 std::ratio_multiply 搭配 std::nano

标准库已定义好常用单位:比如 std::millistd::ratio<1, 1000>std::nanostd::ratio<1, 1000000000>。毫秒→纳秒本质是乘以 1000000,即 milli / nano 的比值。

阅读全文
标签:C