<chrono> 中的用户定义文字重载

user-defined literals overloading in <chrono>

chrono 采用用户定义的文字以使其更方便。对于每个文字,它都有两个重载函数。

constexpr chrono::hours operator "" h(unsigned long long);
constexpr chrono::duration<unspecified , ratio<3600,1>> operator "" h(long double);

我对第二个重载函数感到困惑,即以 long double 作为参数的函数。

为什么我们需要第二次重载?什么是 unspecified

Both represent std::chrono::duration 小时。第一个形成整数文字,第二个形成浮点文字。第一个只能表示刻度数,第二个可以表示刻度的分数。