由于没有明显的原因,价值变为0

时间:2011-05-31 13:46:20

标签: c++ variables member

由于某种原因,我创建的值modkeygen中变为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

2 个答案:

答案 0 :(得分:10)

嗯,因为在ctor中你正在修改一个名为mod的局部变量,它会影响你的班级成员。

答案 1 :(得分:3)

RC5的这一部分

uint128_t mod = 1;
mod <<= W; 

创建一个隐藏类成员的新局部变量mod。在keygen中,您使用其他mod