我希望这不是一个太愚蠢的问题,但我偶然发现了一些C语法,我试图 Package 我的头周围,并希望确认与您所有的Maven在那里。
下面是我们讨论的代码:https://github.com/PacktPublishing/Mastering-CPP-Multithreading/blob/master/Chapter01/ch01_mt_example.cpp
特别是这个电话:
第一个月
我了解了代码的作用;查找不同的类引用或者简单地运行代码是很容易的,但是我想理解那里的语法。
查看C参考:
mt19937
的构造函数采用定义为第一类模板参数的别名的result_type
。- 我知道
hash<thread::id>
将为thread::id
类型提供默认的散列函数,然后我们将this_thread::get_id()
传递给它。C++参考说明hash::operator()
返回其参数的散列值,作为size_t
类型的值,其中size_t
是无符号整型。
我的问题:
1.为什么没有定义mt19937
的类模板类型?
1.为什么我们调用hash<thread::id>()
时不带参数,而把(this_thread::get_id())
放在它旁边呢?
我想我是糊涂了,因为我本以为这句话是这样写的:static thread_local mt19937<size_t> generator(hash<thread::id>(this_thread::get_id()));
有人能解释一下为什么不是吗?
谢谢!
我正在尝试理解上面的代码;我浏览了C++的参考资料,但是有一些语法元素我不理解,很难从参考资料中学习。
1条答案
按热度按时间jhdbpxl91#
为什么没有定义
mt19937
的类模板类型?std::mt19937
不是类模板。它是以下对象的typedef:因此,不必提供模板参数。
为什么我们调用
hash<thread::id>()
时不带参数,而把(this_thread::get_id())
放在它旁边呢?std::hash<thread::id>
是一个类而不是函数。第一组圆括号包含
std::hash<thread::id>
构造函数的参数,如果没有参数,它是默认构造的。第二组括号是对
std::hash<thread::id>
示例上operator()
的 call--这是提供线程id的地方。