C++语法问题-传递一个构造函数和一个括号中的参数给另一个函数?

yc0p9oo0  于 2022-12-20  发布在  其他
关注(0)|答案(1)|浏览(162)

我希望这不是一个太愚蠢的问题,但我偶然发现了一些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++的参考资料,但是有一些语法元素我不理解,很难从参考资料中学习。

jhdbpxl9

jhdbpxl91#

为什么没有定义mt19937的类模板类型?
std::mt19937不是类模板。它是以下对象的typedef:

std::mersenne_twister_engine<std::uint_fast32_t, 32, 624, 397, 31, 0x9908b0df, 11,
                              0xffffffff, 7, 0x9d2c5680, 15, 0xefc60000, 18,
                              1812433253>

因此,不必提供模板参数。
为什么我们调用hash<thread::id>()时不带参数,而把(this_thread::get_id())放在它旁边呢?
std::hash<thread::id>是一个类而不是函数。
第一组圆括号包含std::hash<thread::id>构造函数的参数,如果没有参数,它是默认构造的。
第二组括号是对std::hash<thread::id>示例上operator()call--这是提供线程id的地方。

相关问题