const转换运算符的行为

时间:2012-07-04 07:48:43

标签: c++ operator-keyword

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

我的问题是当const B对象被创建时,为什么它的值会改变为 b.v = 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;
}

2 个答案:

答案 0 :(得分:3)

成员函数签名后的

const与返回类型无关;它只表示函数(或它返回的值)不会改变原始对象的 state ,即不会更改标记为mutable的成员以外的成员。

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

答案 1 :(得分:1)

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

void g(B b)