【问题标题】:How can I initialize a std::chrono::duration constant without using namespace chrono?如何在不使用命名空间 chrono 的情况下初始化 std::chrono::duration 常量?
【发布时间】:2020-10-03 21:52:45
【问题描述】:

我想使用这个代码

static constexpr auto set_time = 1s;

但我不想使用using namespace chrono;

错误 C3688 无效文字后缀“s”;找不到文字运算符“operator”“s”的文字运算符或模式

【问题讨论】:

  • 我觉得标题应该是“How to initialize std::chrono::duration constant without chrono_literals”

标签: c++ literals c++20 chrono


【解决方案1】:
using namespace std::chrono_literals;

【讨论】:

  • static constexpr auto set_time = std::chrono::1s; 我需要这样的东西,但它不起作用
  • 命名空间 chrono 不包含名为 1s 的事物
  • @zerotort 但是为什么呢?没有前导下划线的 UDL 名称是为标准库保留的,因此这个 s 永远不会与其他命名空间中的任何内容发生冲突。 using namespace std::chrono_literals; 只会导入 UDL,而忽略 std::chrono 的其余部分。
  • @HolyBlackCat 也许它在标题中,并且他们遵循不想在标题中放置使用声明的编码准则? (虽然如果这是真的,它可能应该是inline
  • @HolyBlackCat 如果没有冲突,那么这很好,我认为它也可以工作
【解决方案2】:

该行完全等同于:

static constexpr auto set_time = std::literals::chrono_literals::operator""s(1);

【讨论】:

  • std::chrono::seconds(1)
  • @StaceyGirl 不止一种给猫剥皮的方法 :) 我认为你的方法只适用于整数,而我的方法可以适用于 1.5s,例如,并且可以扩展到其他计时文字
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-07-20
  • 2018-02-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-23
  • 1970-01-01
相关资源
最近更新 更多