是否有必要检查位表示 C++ 中的范围

Is it necessary to check range in bit representation C++

部分数据以 64 位整数形式存储。如您所见,在 getDrvAns 函数中,我检查位置 drvIdx-1 中的位是 0 还是 1。无法确定 drvIdx 的值是否在正确的范围 (1-64) 内。但是,我注意到如果我们设置一个高于 64 的值,就会产生环绕效果,如下面的代码所示。

我的问题是,这是标准行为吗?不进行边界检查就保持原样安全吗?

注意:如果该位设置为 0,则驱动器已应答。

uint64_t mDrvAns = 48822;

bool getDrvAns(int drvIdx) {
  std::bitset<64> bitRepOfmDrvAns{mDrvAns};
  return (bitRepOfmDrvAns[drvIdx - 1] != 0ull);
};

std::string yesOrNo(bool val) {
  return ((val==false) ? "Yes" : "No");
}

int main()
{
  int drvIdx = 1;
  std::bitset<64> bitsOfDrvAns{mDrvAns};
  std::cout << bitsOfDrvAns << std::endl;
  std::cout << "Has drv " << drvIdx << " answered? " << yesOrNo(getDrvAns(drvIdx))
        << std::endl;
  drvIdx = 65;
  std::cout << "Has drv " << drvIdx << " answered? " << yesOrNo(getDrvAns(drvIdx))
        << std::endl; 
  return 0;
}

根据 documentation,使用 operator[] 的越界访问是未定义的行为。别这样。

如果您不想自己检查边界,请改为调用 test(),并在必要时准备好处理异常。