2

以下の宣言はすべて同じですか?もしそうなら、定数関数を宣言する標準的な方法は何ですか?

const SparseMatrix transpose();

SparseMatrix transpose() const;

const SparseMatrix transpose() const;
4

3 に答える 3

7

関数名の左側にあるconstは、返されるオブジェクトを変更できないことを意味します。右側のconstは、メソッドがクラスの一部であり、そのデータメンバーを変更しないことを意味します。mutableそのデータメンバーのいずれかがキーワードで宣言されていない限り、またはもちろんその場合、const警備員にもかかわらずその変更は許可されます。

const関数の戻り型が非ポインター型の場合、キーワードの配置は重要ではありません。

 T const f(); // same as const T f();

ただし、ポインタをリターンタイプとしてconst使用する場合は、キーワードの配置が重要であることに注意してください。例えば:

const T* f();

このメソッドは、constへのポインタを返しますT。つまり、それが指すものは不変です。したがって、返されたポインタの逆参照を介して割り当てを行うことはできません。

T* x = f();

*x = y; // error: assignment of read-only location '*(const T*)x'

constが戻り型(つまりポインター)のすぐ右側に配置されている場合、それはポインターがconstであり、変更できないことを意味します。

T* const f();

int main()
{
    T* x const;

    x = f(); // error: assignment of read-only variable 'x'
}

さらに、ポインタの戻り型の両側にあり、constクラスメンバーの変更なし」を示している場合、次のように読み取られます。const

const T* const f() const;

fconstへのconstポインタを返すという名前のconstメンバー関数T

于 2013-01-15T23:35:29.627 に答える
4

SparseMatrix最初のものは、 constであり、変更できないaを返します。

2つ目は、を返す関数を宣言し、SparseMatrix可変メンバーを除いて、関数がクラス変数を変更しないことを保証します(メンバー関数であると仮定します。そうでない場合、この減速では意味がありません)。

最後のものは両方を行います。

于 2013-01-15T23:36:19.790 に答える
0

1)const値を返します2)const関数、その内部でメンバーは変更されません3)1)+2)

于 2013-01-16T02:30:35.237 に答える