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

constメンバー関数の署名の後は、戻り値の型とは何の関係もありません。これは、関数 (またはそれによって返される値) が元のオブジェクトの状態を変更しないことを意味するだけです。つまり、 としてマークされたメンバー以外のメンバーは変更されませんmutable

さらに、関数g()はパラメーターを値で受け取るため、とにかくコピーされます。

于 2012-07-04T07:51:53.187 に答える
1

関数はパラメーターby-valueを受け入れるため、返されるもののコピーであり、そうではないconstため、本体で変更できます。

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