(19) hours operator"" h ( unsigned long long _Val ) { return _CHRONO hours ( _Val ) ; } 。 没错,这是一个函数,看起来很奇怪的函数,经过某心意言的启发和举例,知道其用法了。
++ 给出 测试结果:
++ 这样的运算符函数的定义:
++ 应该叫字面量运算符函数:
++ 继续测试:
(20) sizeof ( long double ) ,看到源代码里出现这样的写法,测试一下,看看这个数据占据几个字节。可见,没什么变化,依然是 float 占据 4 字节 , double 占据 8 字节:
(21) 关于时间的所有字面量函数的定义,单独列举出来,以便看看:
// 以下内容,毫无争议的定义在 std 命名空间
inline namespace literals
{
inline namespace chrono_literals // 在此命名空间里定义了一些函数,奇奇怪怪的形式的函数
{
// using hours = duration<int, ratio<3600>>; // 以 时为计量单位
_NODISCARD constexpr _CHRONO hours operator ""h(unsigned long long _Val)
noexcept /* strengthened */ { // 小时字面量 h
return _CHRONO hours(_Val);
}
// 以下开始省略函数的修饰符,突出重点
_CHRONO duration<double, ratio<3600>> operator ""h (long double _Val) {
return _CHRONO duration<double, ratio<3600>>(_Val); // 这样改写函数名,语义更明显
}
_CHRONO minutes operator ""min (unsigned long long _Val) { return _CHRONO minutes(_Val); }
_CHRONO duration<double, ratio<60>> operator ""min (long double _Val) { // 分钟字面量 min
return _CHRONO duration<double, ratio<60>>(_Val);
}
_CHRONO seconds operator ""s (unsigned long long _Val) { return _CHRONO seconds(_Val); }
_CHRONO duration<double> operator ""s (long double _Val) { // 秒字面量 s
return _CHRONO duration<double>(_Val);
}
// using milliseconds = duration<long long, milli>; // 以毫秒为计量单位
_CHRONO milliseconds operator ""ms (unsigned long long _Val)
{ return _CHRONO milliseconds(_Val); }
_CHRONO duration<double, milli> operator"" ms(long double _Val)
{ // 毫秒字面量 ms 看函数名即可
return _CHRONO duration<double, milli>(_Val);
}
// using micro = ratio<1, 1000000>;
// using microseconds = duration<long long, micro>;
_CHRONO microseconds operator ""us (unsigned long long _Val)
{ return _CHRONO microseconds(_Val); }
_CHRONO duration<double, micro> operator ""us (long double _Val)
{ // 微秒字面量 us
return _CHRONO duration<double, micro>(_Val);
}
_CHRONO nanoseconds operator ""ns (unsigned long long _Val)
{ return _CHRONO nanoseconds(_Val); }
_CHRONO duration<double, nano> operator ""ns (long double _Val)
{ // 纳秒字面量 ns
return _CHRONO duration<double, nano>(_Val);
}
} // namespace chrono_literals
} // namespace literals
namespace chrono { // 在 chrono 命名空间里包含 命名空间 chrono_literals 时间字面量函数
using namespace literals::chrono_literals;
} // namespace chrono
(22)
谢谢