friend函数返回对私有数据成员的引用

Bog*_*hai 0 c++ oop const reference

我有两个关于以下代码的问题.

class cls{
    int vi;
    public:
        cls(int v=37) { vi=v; }
        friend int& f(cls);
};

int& f(cls c) { return c.vi; }

int main(){
    const cls d(15);
    f(d)=8;
    cout<<f(d);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)
  1. 为什么要编译,因为f(d)= 8试图修改const对象?
  2. 为什么即使在删除const属性后它仍会打印15?

hmj*_*mjd 6

由于通过值而不是通过引用传递的参数,它不会将const对象修改为正在复制的对象.这也是因为没有被修改而没有改变的原因.df()d