正向使用功能参数

时间:2016-06-03 13:18:48

标签: c++ function parameters

我现在记得我在C中看到过类似的东西:

void foo(int bar; char baz[bar]) { ... }

我不记得它的名字或有效的语法,我想知道它是否也可用于C ++?

3 个答案:

答案 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::arraystd::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]) { }

也许我已经完全离开,但由于你不记得你所看到的,我认为这可能是这样的。