在下面的代码中,有一个转换运算符,用于将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;
}
答案 0 :(得分:3)
const
与返回类型无关;它只表示函数(或它返回的值)不会改变原始对象的 state ,即不会更改标记为mutable
的成员以外的成员。
此外,您的函数g()
按值获取参数,因此无论如何都会复制它。
答案 1 :(得分:1)
你的函数接受参数 by-value ,所以它是返回内容的副本,而不是const
- 所以你可以在正文中修改。
void g(B b)