Voi*_*tar 2 c++ std c++-chrono
作品:
std::chrono::duration<unsigned long long> test1 = std::chrono::seconds(1);
不起作用:
std::chrono::duration<unsigned long long> test2 = std::chrono::milliseconds(1);
为什么会有所不同?持续时间内部没有足够的粒度吗?
从毫秒值初始化持续时间的首选方法是什么?
std::chrono::duration的模板参数列表包含两个参数:用于保存基础数据的类型,以及一个std::ratio表示持续时间指数的参数。类型,如std::chrono::seconds和std::chrono::milliseconds是模板的特殊化,利用std::chrono::duration<int64_t, std::ratio<1>>和std::chrono::duration<int64_t, std::ratio<1, 1000>>分别。
如果您不提供std::ratio该类型的参数,则默认为std::ratio<1>。
结果,您的自定义工期类型隐式采用形式std::chrono::duration<unsigned long long, std::ratio<1>>,这使其几乎等同于std::chrono::seconds(唯一的区别是无符号值而不是有符号值),但是因为它的比率高于提供给std::chrono::milliseconds类模板的比率禁止分配/原始转换。在这种情况下,如果您希望分配完成,则需要显式强制转换:
typedef std::duration<unsigned long long> my_duration;
//my_duration test1 = std::chrono::milliseconds(1);//Forbidden
my_duration test1 = std::chrono::duration_cast<my_duration>(std::chrono::milliseconds(1)); //Permitted, will be truncated
my_duration test2 = std::chrono::duration_cast<my_duration>(1ms); //Permitted, may be easier to read
Run Code Online (Sandbox Code Playgroud)
该std::ratio参数表示持续时间的变动量。刻度大小越小,表示持续时间的基础数字越大。举个例子:
using seconds = std::chrono::seconds; //std::duration<int64_t, std::ratio<1,1>>
using milliseconds = std::chrono::milliseconds; //std::duration<int64_t, std::ratio<1,1000>>
using nanoseconds = std::chrono::nanoseconds; //std::duration<int64_t, std::ratio<1,1000000000>>
seconds time1 = 5s; //underlying integer value is 5.
milliseconds time2 = 5ms; //underlying integer value is 5.
time2 = time1; //underlying integer value for time2 is 5000, for time1 is still 5.
time2 = 17ms; //underlying integer value is 17.
//time1 = time2; //forbidden; tick size of time2 is smaller than time1
time1 = std::chrono::duration_cast<seconds>(time2);
//underlying integer value for time1 is 0, due to truncation; time2 is still 17.
nanoseconds time3 = 5ms; //underlying integer value is 5000000.
time1 = 2s; //underlying integer value is 2.
time3 = time1; //underlying integer value is 2000000000.
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2406 次 |
| 最近记录: |