#c #variadic-functions
#c #variadic-функции
Вопрос:
Я слышал о продвижении параметров в переменных функциях, например, в printf
функции. Когда это происходит?
Ответ №1:
В переменных функциях, подобных этому:
void f(int, ...);
// or
void f(...);
переменные аргументы подвергаются дополнительным преобразованиям, известным как повышение аргументов по умолчанию:
std::nullptr_t
преобразуется вvoid*
float
аргументы преобразуются вdouble
, как при продвижении с плавающей запятойbool
char
Перечисления , ,short
, и unscoped преобразуются вint
целочисленные типы или более широкие, как в целочисленном продвижении
Обратите внимание, что эти преобразования не выполняются с пакетами параметров в переменных шаблонах и поэтому обычно предпочтительнее, чем переменные функции.
template <typename ...Ts>
void f(Ts ...); // no promotions here
Комментарии:
1. std::nullptr_t что это?
2. @FabioDiLieto Если вы просто нажмете на ссылку, которой я поделился, а затем нажмете nullptr_t , вы увидите, что это тип литерала нулевого указателя,
nullptr
.