constベースのリロード


C++は、最上位レベルのconstの違いに基づいてリロード関数を定義することは許されません.たとえば、呼び出し時にconst intにパラメータを持つ関数がintの実パラメータを受け入れることができるため、次のように繰り返し宣言されます(暗黙的なタイプ変換)
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++         ,     ,            )