C ++编译器可以假设一个const bool&价值不会改变?

C ++编译器可以假设'const bool&'价值不会改变? 例如,假设我有一个类:
class test {
public:
  test(const bool &state)
    : _test(state) {
  }

  void doSomething() {
    if (_test) {
      doMore();
    }
  }
  void doMore();

private:
  const bool &_test;
};
我用它如下:
void example() {
  bool myState = true;
  test myTest(myState);

  while (someTest()) {
    myTest.doSomething();
    myState = anotherTest();
  }
}
是否允许编译器的标准假设_test的值不会改变。 我想不是,但只是想确定。     
已邀请:
不。仅仅因为您的引用(或指针)是
const
并不能阻止其他人使用非
const
引用。像这样:
int main(void) {
  bool myState = true;
  test myTest(myState);
  std::cout << myTest.getState() << std::endl;
  myState = false;
  std::cout << myTest.getState() << std::endl;
}
甚至更简单:
bool a = true;
const bool& b = a;
a = false; // OK
b = true; // error: assignment of read-only reference ‘b’
    
const Type & r
表示“
r
的值不能通过此引用来改变” - 但它可能会被其他直接访问引用值的代码(或通过非const引用或指针)更改。
const Type * p
也是如此:“ѭ9指向的值不能通过指向它的指针改变。     
你是对的,它不能假设,因为
_test
的referand的值可能会在
doMore
的实现中被修改,这在编译时是不可用的。因为在这种情况下,
myState
不是一个const对象,所以对于
doMore
来说,抛弃const并修改它是有效的(例如)。注意有效,不可取;-) 通常,
doMore
可能会调用具有其他指针/引用的函数,这些函数由另一条路径指向同一个
bool
对象。在您的示例中,没有其他引用,因此如果编译器可以看到可能引用它的所有代码(包括
doMore
的定义),并且它们都没有修改该值,那么它可以做出假设。     

要回复问题请先登录注册