常量转换运算符的行为

Behaviour of const conversion operator

本文关键字:运算符 转换 常量      更新时间:2023-10-16

在下面的代码中,有一个转换运算符,用于将类 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;
}
成员

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

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

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

void g(B b)