2017-11-30 54 views
6
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 पर सामना करना पड़ा।स्कोप रिज़ॉल्यूशन ऑपरेटर को दो बार उपयोग किया जा रहा है

मुझे लगता है कि दूसरा और तीसरा "वचनबद्धता" वर्ग का नाम और कन्स्ट्रक्टर का संदर्भ देता है, लेकिन मैं पहले के अर्थ को नहीं समझ सकता। मुझे यकीन है कि यह नामस्थान का संदर्भ नहीं देता है क्योंकि वह नाम अलग है। मैंने स्कोप रेज़ोल्यूशन ऑपरेटर को उदाहरणों में दो बार उपयोग किया है, लेकिन वे नेस्टेड नेमस्पेस का संदर्भ लेते हैं।

+1

यहां तक ​​कि कक्षा बी {बी(); }; बी :: बी :: बी :: बी() {} जीसीसी और क्लैंग के साथ संकलित है लेकिन एमएसवीसी के पास समस्याएं हैं। दिलचस्प। शायद इंजेक्शन प्रकार। –

उत्तर

5

सी ++ कक्षाओं में उनके नाम होने की सुविधा उनके कार्यक्षेत्र ([class]/2) में इंजेक्ट किया है

वर्ग नाम भी वर्ग खुद के दायरे में डाला जाता है; इसे इंजेक्शन-क्लास-नाम के रूप में जाना जाता है। पहुंच के प्रयोजनों के लिए, इंजेक्शन-क्लास-नाम माना जाता है कि यह सार्वजनिक सदस्य नाम था।

और आपके द्वारा दिखाए गए कोड स्निपेट का उपयोग करता है। कुछ संदर्भों में Commitment::Commitment कक्षा को स्वयं नामित करता है, और दूसरों में c'tor नाम देता है। केवल अंतिम Commitment(, जहां आप कोष्ठक खोलते हैं, c'tor परिभाषा शुरू करता है।

और यह बहुत ज्यादा खराब देख सकते हैं:

struct foo { 
    foo(); 
}; 

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

कौन सा आप देख सकते हैं वैध सी ++ Live है।

संबंधित मुद्दे