Объясните, как работает передаче переменного количества значений в прототипе функции f? Почему тут явно указан тип S, в то время когда в других примерах использования передачи переменного числа значений, тип передаваемых значений не указывается?(просто пишут многоточие). Как работать с переданными значениями?
enum S {A,B,C};
void f(int n, S ...);
Во-первых в записи void f(int n, S ...);
S
не задает тип передаваемых значений. На самом деле эта запись эквивалентна void f(int n, S /*unnamed*/, ...);
, т.е. S - эти тип второго аргумента без имени.
Тип значений, передаваемых через ...
вообще никак не задается. Они передаются как блок, содержащий указатели void *
, double
и целочисленные типы (в соответствии с правилами преобразования для целочисленных типов).
Также не стоит путать variadic функции с шаблонами функций, где как раз можно задавать тип передаваемых значений:
template<typename ... Values>
void f(int, Values ... values);
Values
- пак с типами параметров
Из стандарта: 8.3.5.4:
Там, где это синтаксически корректно и где лексема «...» не является частью абстрактного-описателя, форма «,...» считается синонимом формы «...».
Так что это просто функция, получающая аргументы int
, S
и что угодно. Синоним
void f(int n, S, ...);
Оборудование для ресторана: новинки профессиональной кухонной техники
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
Есть исходный и отсортированный массивыСначала у меня выводятся оба массива, но если элементов в массиве меньше 8, то вывести их повторно,...
Учился писать код в паскалеПо ходу учебы перешел на с++ и Visual Studio
Нужно чтобы фрагмент вытягвался снизу экрана за движением пальцаМожно ли это сделать с помощью Bottom Sheet и если да, то как? (android
Есть приложение, в котором идет запрос на серверКак сделать чтобы прогресс бар ждал ответ от сервера и выводил что надо