Сейчас я изучаю основы C++ и ООП в моем университете. Я не уверен на 100%, как работает указатель функции при назначении им функций. Я столкнулся со следующим кодом:
void mystery7(int a, const double b) { cout << "mystery7" << endl; }
const int mystery8(int a, double b) { cout << "mystery8" << endl; }
int main() {
void(*p1)(int, double) = mystery7; /* No error! */
void(*p2)(int, const double) = mystery7;
const int(*p3)(int, double) = mystery8;
const int(*p4)(const int, double) = mystery8; /* No error! */
}
Насколько я понимаю, назначения p2
и p3
хороши, так как типы параметров функций совпадают, а константа верна. Но почему не удается выполнить назначения p1
и p4
? Разве не должно быть незаконным сопоставлять const double/int с неконстантным double/int?