構造体ではなく構造体ポインタにconstを適用すると、constは異なる署名を作成するのはなぜですか?constが関数シグネチャの一部になることがあるのはなぜですか?
など。
typedef struct test_s {
int foo;
} test;
void foo(test *ptr){
return;
}
// This is ok
void foo(const test *ptr){
return;
}
void foo(test t){
return;
}
//This is an error
void foo(const test t){
return;
}
(GCCバージョン4.9.2でテスト)
具体的には、なぜそれが底つのポインタを有するペアがエラーでない場合、エラーであることです。参照された重複した質問(Functions with const arguments and Overloading)はまた、ポインタの場合は重複しているべきであると主張するようである。それ以前の機能の重複せる
void foo(test t){
return;
}
:それは同じであるので
関数がどのような引数を取ることができるかを考えてみましょう。最後の2つはまったく同じ引数を取ることができます。最後のものは内部コピーを一定にすることを任意に決定します(実装の詳細)。最初のものは定数へのポインタを取ることができないので、実際には外部から見て異なる関数です。 –