Как мне избежать неявных преобразований на не конструирующих функциях?
Как избежать неявного приведения к неконструктивным функциям?
У меня есть функция, которая принимает целое число в качестве параметра,
но эта функция также принимает символы, bools и longs.
Я полагаю, что это делает это, неявно бросая их.
Как можно избежать этого, чтобы функция принимала только параметры соответствующего типа и в противном случае отказалась бы компилировать?
Существует ключевое слово «явный», но оно не работает с неструктурирующими функциями. : \
что я делаю?
Следующая программа компилируется, хотя я бы этого не хотел:
* пожалуйста, обязательно укажите на любое неправильное использование терминологии и допущений
#include <cstdlib>
//the function signature requires an int
void function(int i);
int main(){
int i{5};
function(i); //<- this is acceptable
char c{'a'};
function(c); //<- I would NOT like this to compile
return EXIT_SUCCESS;
}
void function(int i){return;}
Между прочим, способность передавать тип char, long, bool или любой другой целочисленный тип, для которого ожидается int, обусловлена правилами целочисленного продвижения и преобразования, встроенными в язык. Это другой механизм, чем неявные преобразования, выполняемые с неявными конструкторами.