2012-02-12 29 views
1

た(const方法で)これらの違いは何ですか:のConst宣言

const int getNum(int &a, int &b) const; 

    const int getNum(int &a, int &b); 

    int getNum(int &a, int &b) const; 

ありがとうございました!

+3

3つすべてが間違っています:スワップは 'void'を返します。 – Sjoerd

+0

が変更されました。その単なる例です。 、なぜダウングレードですか? – Itzik984

+0

非常にいい質問 – mikithskegg

答えて

3

これらはメンバー関数の宣言であり、おそらく正規関数ではありません。

const int getNum(int &a, int &b) const; 

最も左のconstは、この関数から返されるintが定数であることを意味します。これは比較的意味のない区別です。intは定数ですが、使用する前に暗黙のうちにそのコピーを作成します。このがクラス戻り値の型に影響を及ぼしますが、それでも特に有用ではありません。

右端のconstは、メンバ関数が定数オブジェクトで呼び出され、その関数がそのオブジェクトを変更できないことを意味します。効果的には、関数内のポインターは一定になります。

const int getNum(int &a, int &b); 

ここconstは、最初の例 - 戻り値の左端のconstが一定であるのと同じ意味を持ちます。

int getNum(int &a, int &b) const; 

constがここで最初の右端constと同じ意味を有する例を、暗黙thisポインタは一定です。

1
const int swap(int &a, int &b); 

可変値不変値を

int swap(int &a, int &b) const; 

リターンを返し、それ内部に一つの変数は、実行時に変更することはできません。

const int swap(int &a, int &b) const; 

1

は、第1および第3のは、彼らがconstインスタンス上で呼び出すことができることを意味し、constメンバ関数であり、インスタンスのフィールドのいずれかを変更しないでください。

戻り値のタイプはconst intですが、それはあまり有用ではありません。一時的な値を返すので、その値はconstになりません。

関連する問題