я вспомнил теперь, когда я видел что-то подобное в C:вперед использование параметра функции
void foo(int bar; char baz[bar]) { ... }
Я не помню его имя или допустимый синтаксис, и я удивляюсь, если он доступен в C++ тоже?
я вспомнил теперь, когда я видел что-то подобное в C:вперед использование параметра функции
void foo(int bar; char baz[bar]) { ... }
Я не помню его имя или допустимый синтаксис, и я удивляюсь, если он доступен в C++ тоже?
Нет, это невозможно в соответствии со стандартом, поскольку вы динамически передаете размер массива функции, если только не существует специального расширения компилятора, которое мне не хватает.
Что вы можете сделать, это указать его в качестве аргумента шаблона и пусть вычет делать свою работу, например:
template<size_t size>
void foo (char (&a)[size])
{
for (size_t i = 0; i < size; ++i)
cout << a[i] << endl;
}
int main()
{
char a[] = {'a','b','c','d','e'};
foo(a);
return 0;
}
Или, так как вы работаете с C++, используйте std::array
или std::vector
и итераторы.
О, я даже не знал, что есть также функции шаблонов. Спасибо, я приму ваш ответ как можно скорее. –
Для начала char baz[10]
при использовании в качестве параметра объявляет указатель, а не массив, поэтому 10
полностью игнорируется. Это называется распадом массива на указатель, и это неудачное наследование от C
.
Учитывая, что вы не запрашивали строго о размере массива и расширяли свой вопрос до использования предыдущего параметра, аргументом по умолчанию являлись бы аргументы по умолчанию. Например.
void foo(int a, int b = a);
И вот ответ снова нет, это недействительно.
См. Этот ответ: https://stackoverflow.com/a/1880877/2805305 для стандартного обоснования.
На самом деле существует «Прямое использование параметра функции» на C++, но не то, о чем вы говорите.
Поскольку C++ 11, вы можете делать такие вещи, как это вывести тип параметров (или тип возвращаемого значения) с использованием предыдущего параметра:
template <typename T>
auto get (T const& t, size_t i) -> decltype(t[i]) { }
Или:
template <typename T>
void set (T &t, size_t i, decltype(t[i]) const& v) { }
Может быть, я полностью но, поскольку вы точно не помнили, что видели, я подумал, что это может быть так.
nope это невозможно. – bolov
Я не думаю, что ';' является допустимым синтаксисом – user463035818
Это недопустимый код C или C++ – NathanOliver