функция — C ++ переопределение несоответствие / интерес

Я отвечал этот вопрос когда я подумал об этом примере:

#include <iostream>

void func(int i);
void func();

int main (){
func();
return 0;
}
void func(){}

В приведенном выше примере код компилируется нормально. Однако в приведенном ниже примере код компилируется неправильно:

#include <iostream>

void func();
int func();

int main (){
func();
return 0;
}
void func(){}

Это ошибка, которая возникает при компиляции этого кода (в clang ++):

file.cpp:4:5: error: functions that differ only in their return type cannot be
overloaded
int func();

Я ожидал бы ошибку как это оба раза.

Я немного повозился с кодом, и по какой-то совершенно странной причине кажется, что компоновщик полностью игнорирует некорректные объявления. Теперь это позволяет некоторым очень странный код Например, этот заголовочный файл будет легальным:

#ifndef EXAMPLE
#define EXAMPLE
void func();
void func(int a);
void func(int b);
void func(int a, int b);
void func(int a, short b);
void func(int w);
void func(short b);
#endif

Зачем? Почему в мире все это работает? Это просто стандартная ошибка C ++? Сбой компилятора? «Особенность»? Актуальная особенность? (Это все один вопрос, кстати.)

Постскриптум Пока я жду ответа, я собираюсь воспользоваться этим для предварительного добавления функций в код, которые, вероятно, окажутся в производстве.

0

Решение

Первый — перегрузка функции, имена аргументов не учитываются (типы аргументов или их количество различны).

Второе — переопределение функции (типы аргументов и количество одинаковы) с измененным типом возврата, который запрещен. Перегрузка только возвращаемого типа не допускается. Это сказал вам компилятор.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]