由于某种原因,我创建的值mod
在keygen
中变为0,尽管在制作时以及在运行keygen之后它是正确的。我不明白为什么。谁能告诉我?
class RC5{
private:
uint64_t w, r, b;
uint128_t mod;
std::string mode;
std::vector <uint64_t> S;
public:
RC5(std::string KEY, std::string MODE, uint64_t W = 32, uint64_t R = 12, uint64_t B = 16){
uint128_t mod = 1;
mod <<= W;
mode = MODE;
w = W;
r = R;
b = B;
std::cout << mod << std::endl; // 1 << 32
keygen(KEY);
std::cout << mod << std::endl; // 1 << 32
}
void keygen(std::string key){
std::cout << mod << std::endl; // 0
// lots of commented out stuff
}
};
我确信uint128_t写得正确,所以这似乎没有意义。如有必要,可以找到uint128_t here。
答案 0 :(得分:10)
嗯,因为在ctor中你正在修改一个名为mod
的局部变量,它会影响你的班级成员。
答案 1 :(得分:3)
RC5的这一部分
uint128_t mod = 1;
mod <<= W;
创建一个隐藏类成员的新局部变量mod
。在keygen
中,您使用其他mod
。