В настоящее время я пытаюсь понять концепцию вызовов функций и заметил, что вы можете написать ужасный код, но все же можете заставить его работать, используя неявное преобразование, const и static.
Теперь я хотел бы понять, почему и особенно, как это работает. Например, ниже приведен фрагмент кода, который я использовал для тестирования.
Строка, отмеченная (1), требует a_const, требует ее модификатор const
и наличие функции static
, которая принимает более или менее подходящие параметры. Удаление любого из этих двух приводит к ошибке компиляции. Так как же это работает?
#include <iostream>
struct A {
static void func(const int a, int b) {
std::cout << "A-1"<<std::endl;
}
void func(const int a, float b) {
std::cout << "A0"<<std::endl;
}
void func(double a, float b) {
std::cout << "A1"<<std::endl;
}
void func(unsigned int a, char b) {
std::cout << "A2"<<std::endl;
}
void func(float a, int b) {
std::cout << "A3"<<std::endl;
}
};
int main() {
const A a_const;
A a;
a_const.func(1.f,1.f); // (1)
// a.func(1.f,1.f); // (2)
return 0;
}