std :: string.size()未知行为

问题描述 投票:0回答:1

我期望Output 1等于Output 2,由于简单的加减运算,方括号应该没有区别这是输出:

Output 1: 3
Output 2: 4294967295
Output 1: 6
Output 2: 2

我认为这与string.size()有关,但是我无法向自己解释这是怎么发生的。也许有人可以帮助我理解这一点。

int lastPos = 0;
std::string inputString = "0b1*10*0";
while (lastPos != -1){
    lastPos = inputString.find('*',lastPos+1);

    if(lastPos != -1){
        // -2 for 0b/ removal
        // 8 Bit max Size
        std::cout << "Output 1: " << lastPos-2 + 8 - (inputString.size()-2) << std::endl;
        std::cout << "Output 2: " << lastPos-2 + 8 - inputString.size()-2 << std::endl;
    }          
}
c++
1个回答
4
投票
lastPos-2 + 8 - (inputString.size()-2)

!= lastPos-2 + 8 - inputString.size()-2

lastPos-2 + 8 - (inputString.size()-2)

==

lastPos-2 + 8 - inputString.size()+2因为-(-2) == +2
© www.soinside.com 2019 - 2024. All rights reserved.