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

时间:2012-09-21 10:14:51

标签: c++ oop reference const

我对以下代码有两个问题。

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;
}
  1. 为什么要编译,因为f(d)= 8会尝试修改const对象?
  2. 为什么即使在删除const属性后它仍会打印15?

1 个答案:

答案 0 :(得分:6)

由于const的参数是按值传递而不是由d传递,因此不会修改f()对象作为d副本参考。这也是{{1}}未被修改的原因。