namespace libzerocoin {

//Commitment class
Commitment::Commitment::Commitment(const IntegerGroupParams* p,
                               const Bignum& value): params(p), contents(value) {
this->randomness = Bignum::randBignum(params->groupOrder);
this->commitmentValue = (params->g.pow_mod(this->contents, params->modulus).mul_mod(
                         params->h.pow_mod(this->randomness, params->modulus), params->modulus));
}

我刚刚在GitHub上遇到了此函数定义。

我假定第二个和第三个“Commitment”是指类名和构造函数,但我不知道第一个的含义。我确信它不会引用 namespace ,因为该名称是不同的。我已经看到范围解析运算符在示例中被使用了两次,但是它们引用了嵌套的 namespace 。

最佳答案

在C++中,类具有将其名称注入(inject)其作用域([class]/2)的功能:



您显示的代码段就利用了它。在某些情况下,Commitment::Commitment命名类本身,而在其他情况下命名c'tor。只有最后一个Commitment((在其中打开括号的位置)才开始c'tor定义。

而且看起来可能更糟:

struct foo {
    foo();
};

foo::foo::foo::foo() = default;

您可以看到的是有效的C++ Live

关于c++ - 范围解析运算符被两次使用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51597003/

10-10 20:09