1

オーバーロードできるものについての私の理解が正しいかどうか、誰か確認してもらえますか?

  • 定数/非定数

  • 可変/非可変

  • パラメータの型 (明らかに)

  • パラメータの数(明らかに)

  • NOT 戻り型

  • EDIT:関数(パラメータタイプではない)が揮発性/不揮発性かどうか

int、int*、& int、および && int を使用して同じ名前の関数をオーバーロードできるかどうかについても少し混乱していますか? だろう

void X(int);
void X(int*);
void X(int&);
void X(int&&);

同じ関数のオーバーロードされた 4 つの異なるバージョンですか?

4

1 に答える 1

7

パラメーターの型とパラメーターの数 - オーバーロードされた関数を区別する唯一の方法です。int/int &/int &&これらは正式には異なるパラメータータイプであるため、区別を含め、パラメーターに関連するすべてをカバーしています。

あなたのconst/non-const区別(そして忘れないでくださいvolatile)は、クラスメソッドに適用された場合でも、パラメータータイプの一部と見なすことができます。その場合、暗黙のthisパラメーターを実際に修飾するためです。これをパラメーターベースのオーバーロードと見なすか、別の種類のオーバーロードと見なすかは、あなた次第です。

可変/非可変の意味がわかりません。

また、言語仕様には、同等のパラメーター宣言の概念を定義する一連の規則があることも言わなければなりません。これは、異なる (型による) パラメーター宣言が、オーバーロードの目的で同等と見なされる可能性があることを意味します。

于 2013-06-03T20:48:06.587 に答える