我可以确定由另一个实体修改const引用后是否会更新它?

时间:2019-01-02 08:51:00

标签: c++ reference const pass-by-reference const-correctness

我有一个类Foo有权读取类Bar的实例,但没有修改它的权限。同时,Bar的实例可以被其他元素修改。

目前,我是通过以下方式实现的:

class Foo
{
  private:
    const Bar& bar; // Foo can't modify it
  public:
    Foo(const Bar& bar_) : bar(bar_) {}
    void doSomthing() { this->bar.printData(); }
};

它可以这样使用:

Bar bar;
Foo foo(bar);
bar.update(); // This modify the instance of Bar
foo.doSomthing(); // This use the reference to (modified) bar

我的问题是:通过这种实现,我可以确定编译器不会使用bar的未更新副本,即使该引用被声明为const吗?

如果没有,我该怎么办?

注意:出于兼容性原因,我不使用C ++ 11

2 个答案:

答案 0 :(得分:1)

是的,您可以确定。引用在编译器内部作为指针实现,并且bar.update();Foo::bar都作用于相同的内存位置。

当然,只要不存在数据争用问题,这时就会出现常见的同步问题。

答案 1 :(得分:-1)

我能很快找到的最好的pre c ++ 11标准文本是2005年的this draft,它应该足够接近C ++ 03。

在3.10:13 [basic.lval]中说

  

不得修改const限定表达式的引用(通过该表达式),除非它是类类型并且具有可变组件,则可以修改该组件。

>

重点是我的,并强调希望通过其他表达方式(如果它们本身允许的话)可以修改引用对象