【发布时间】:2015-12-28 04:51:24
【问题描述】:
我有一个C ++ 11随机数分布的实例; uniform_int_distribution,以及C ++ m19937_64算法的实例。
我使用指向一个类的指针传递对这些对象的引用,该类维护指向这两个对象的指针以供以后使用。
在这个类的一个成员函数中,我想调用operator()函数从uniform_int_distribution生成一个随机数。
我做了以下事情。 (可能不正确,因此提出了问题。)
std::random_device rd;
std::mt19937_64 gen(rd());
std::mt19937_64 *gen_p = &gen;
std::uniform_int_distribution<int> dis(0, 9);
std::uniform_int_distribution<int> *dis_p = &dis;
然后我执行以下操作:(稍后在代码中,在我的类成员函数中。)
int random_number = (*dis_p)(*gen_p);
这看起来有点奇怪或模棱两可,或者至少对我来说是这样,因为我以前没有遇到过。
没有指针,一个人会执行以下操作:
int random_number = dis(gen_p);
【问题讨论】:
-
您可以使用
->,但坦率地说,为什么不存储创建的值呢?为什么要使用指针? -
这看起来非常好:在解引用表达式
*dis_p周围加上括号,让它完全按照你的意愿去做。但是,除非在某些情况下dis_p可能需要为NULL,否则您可以将指针替换为引用,并恢复您熟悉的语法。 -
我认为你应该习惯这种在涉及指针的 C++(和 C)代码中常见的语法。否则,是的,远离它们,您将永远不会摘要此类arcane语法。 span>