Почему const создает другую подпись, когда она применяется к указателю struct, а не к структуре?Почему const иногда является частью сигнатуры функции?
E.g.
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) также, похоже, утверждает, что случай с указателями должен быть дублирующимся.
Подумайте, какие аргументы может принять функция. Последние 2 могут принимать одни и те же аргументы, последний просто произвольно решает сделать свою внутреннюю константу копирования (деталь реализации). Самый первый не может взять указатель на константу, поэтому они действительно разные функции, видимые снаружи. –