0

在下面的代码中有一个转换运算符,用于将 A 类对象转换为 const B 类对象。

我的问题是当创建 const B 对象时,为什么它的值更改为 bv=20 没有错误。

可能,我错过了一些东西。

提前感谢

class B
{
public:
    int v;
    B() : v(10) {}
};

class A
{
public:
    operator B() const {}
};


void g(B b)
{
    b.v=20;
}

int main()
{
    A a;
    g(a);
    return 0;
}
4

2 回答 2

3

constafter 成员函数签名与返回类型无关;它只意味着函数(或它返回的值)不会改变原始对象的状态,即不会改变那些标记为的成员以外的成员mutable

此外,您的函数g()按值获取参数,因此无论如何它都会被复制。

于 2012-07-04T07:51:53.187 回答
1

您的函数接受参数by-value,因此它是返回内容的副本,而不是const- 因此您可以在正文中进行修改。

void g(B b)
于 2012-07-04T07:52:11.267 回答