朋友函数是否必须将const对象作为参数?

时间:2015-04-21 13:55:49

标签: c++

我认为朋友函数必须将类的对象作为其参数的朋友,但允许修改这些对象吗?

2 个答案:

答案 0 :(得分:2)

根本不是强制性的。没有任何要求。唯一的区别是friend函数可以访问类的私有成员。但它可能完全不相关。

class A {
    int x;

    friend void foo();
};


void foo() {
    std::cout << "Hello, World!\n";
}

foo没有任何参数,甚至没有以任何方式引用A,但它仍然是friend并且完全被允许。毫无意义,但完全合法。

我们可以让它做这样的事情:

void foo() {
    A a;
    a.x = 42;
}

答案 1 :(得分:0)

友谊授予访问班级所有私人成员的权限。

包括修改非const对象的任何或所有(受保护,私有,公共)成员的能力,修改const对象的任何或所有可变成员的能力。它还包括读取任何或所有成员的价值的能力。

这假设成员本身也允许操作。