我现在记得我在C中看到过类似的东西:
void foo(int bar; char baz[bar]) { ... }
我不记得它的名字或有效的语法,我想知道它是否也可用于C ++?
答案 0 :(得分:3)
不,根据标准,这是不可能的,因为你动态地将数组的大小传递给函数,除非我缺少一些特殊的编译器扩展。
您可以做的是将其指定为模板参数,并让扣除功能完成,例如:
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
和迭代器。
答案 1 :(得分:2)
对于初学者,char baz[10]
用作参数时声明指针而不是数组,因此10
被完全忽略。这被称为指针的数组衰减,它是C
的不幸继承。
考虑到你没有严格要求数组大小,并将你的问题扩展到任何前一个参数的使用,案例将是默认参数。 E.g。
void foo(int a, int b = a);
这里答案是否定的,它无效。
请参阅此答案:https://stackoverflow.com/a/1880877/2805305了解标准理由。
答案 2 :(得分:0)
实际上,在C ++中有一些&#34;转发使用函数参数&#34; ,但不是你在说什么。
从C ++ 11开始,您可以使用以前的参数来执行这样的操作来推断参数类型(或返回类型):
done()
或者:
template <typename T>
auto get (T const& t, size_t i) -> decltype(t[i]) { }
也许我已经完全离开,但由于你不记得你所看到的,我认为这可能是这样的。