gpt4 book ai didi

c++ - 如何在 C++ 中调用 void foo(int (&)[]) {}?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:15:13 27 4
gpt4 key购买 nike

void f1(int (&)[8])
{}

void f2(int (&)[])
{}

int main()
{
int a[8];

f1(a); // OK

f2(/* What should I put here? */); // ???

return 0;
}

如何调用 f2?

PS: void f2(int (&)[]) {} 在 VC++ 2012 下是合法的。

考虑以下几点:

template<class T>
struct A
{};

template<class T>
struct A<T[]>
{};

template<class T, size_t size>
struct A<T[size]>
{};

最佳答案

C++ 有一个明确的规则,不允许将没有边界的数组引用或指针作为参数(但这些是其他有效类型)。以下将是此类参数的有效参数

extern int arg[];

请注意,您不能使用具有大小的数组。 C++ 没有类型兼容性的概念。 C 具有并使没有大小的数组类型与具有大小的相应数组类型兼容。在 C++ 中,类型系统更严格,类型具有链接,并且不存在无原型(prototype)函数类型,因此类型兼容性不是真正的需要,因此 C++ 放弃了它。

关于c++ - 如何在 C++ 中调用 void foo(int (&)[]) {}?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12909213/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com