constベースのリロード
C++は、最上位レベルのconstの違いに基づいてリロード関数を定義することは許されません.たとえば、呼び出し時にconst intにパラメータを持つ関数がintの実パラメータを受け入れることができるため、次のように繰り返し宣言されます(暗黙的なタイプ変換)
ただし、C++では、メンバー関数がconstであるかどうかを区別して再ロードできます.たとえば、次の方法では問題ありません.
このコードが問題にならない理由は、実際には、ここのconstには最上位のconstだけでなく、最下位のconstが含まれているからです.次の偽コードは、重複宣言の問題が発生しない理由をよりイメージ的に説明します.
void print(int)
void print(const int) // , void print(int)
void print(int*)
void print(int*const) // , void print(int*const)
ただし、C++では、メンバー関数がconstであるかどうかを区別して再ロードできます.たとえば、次の方法では問題ありません.
class Screen {
public:
// ,
void print() const;
void print();
}
このコードが問題にならない理由は、実際には、ここのconstには最上位のconstだけでなく、最下位のconstが含まれているからです.次の偽コードは、重複宣言の問題が発生しない理由をよりイメージ的に説明します.
std::string Person::getName() const;
// :
//std::string Person::getName(const Person* const);
//( : C++ , , )