は、次のコードスニペットを考えてみましょう:機能(のconstポインタ)
void foo(const int i) // First foo
{
std::cout << "First " << i << endl;
}
void foo(int i) // Second foo
{
std::cout << "Second " << i << endl;
}
int main()
{
int i = 5;
foo(i);
}
コンパイルエラー:const
sが非const
オブジェクトを初期化することができるので redefinition of 'void foo(int)'
、上記の動作は、合理的なようです。それは第二の場合にはfoo_ptr
のためにそうではない、なぜ最初のケースでfoo
の二つの定義が同じとみなされた場合 - それは明確であるかもしれませんが、私の質問をされ
void foo_ptr(const int* p) // First foo_ptr
{
std::cout << "First " << *p << endl;
}
void foo_ptr(int* p) // Second foo_ptr
{
std::cout << "Second " << *p << endl;
}
int main()
{
int i = 5;
foo_ptr(&i); // Second foo_ptr gets called; prints 'Second 5'
}
:今、これを検討?つまり、なぜconst
が最初のケースでは無視され、2番目のケースでは無視されるのでしょうか?第1の場合
可能重複http://stackoverflow.com/questions/3682049/functions-with-const-arguments-and-overloading – ThomasMcLeod
ことデュープconst intとint signaturesが同じとみなされる理由を説明しますが、OPはこれを(最初の例のように)非常によく理解しています。なぜポインターの例に同じ問題がないのかについては触れていません。 – paxdiablo