Почему я не могу объявить переменную или функцию более одного раза с разными типами? - PullRequest
0 голосов
/ 16 февраля 2020

Хорошо, я знаю «Правило одного определения», но когда я пытаюсь объявить переменную с разными типами впоследствии в исходном коде, я сталкиваюсь с некоторой ошибкой, такой как:

int fkc();
void fkc();

введите изображение описание здесь

Я имею в виду, что эти два утверждения - всего лишь два объявления, а не определения. Хорошо, у каждой декларации должно быть только одно уникальное определение?

Ответы [ 2 ]

0 голосов
/ 16 февраля 2020

В C ++ нельзя перегружать функции в зависимости от типа возвращаемого значения.

Разрешение перегрузки учитывает имя функции, cv-квалификаторы, количество параметров и их типы.

Вы можете сделать что-то вроде:

auto fck()
{
    if constexpr(...) return my_int;
    else /* do smth without return */
}

, но это, конечно, не перегрузка функции.

0 голосов
/ 16 февраля 2020

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

func(int x....), который не включает тип возврата

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...