【发布时间】:2021-07-07 11:53:20
【问题描述】:
考虑以下函数:
void func1(int unsized_array[]){}
void func2(int sized_array[10]){}
void func3(int *pointer){}
根据结果:
std::cout << std::is_same<decltype(func1), decltype(func2)>::value << std::endl;
std::cout << std::is_same<decltype(func2), decltype(func3)>::value << std::endl;
std::cout << std::is_same<decltype(func3), decltype(func1)>::value << std::endl;
这三个函数的类型是一样的。同样在函数func2、sizeofoperator 内部也不提供所有组合的数组元素的大小。
那么大小数组作为函数参数的目的是什么(如func2)?
【问题讨论】:
-
这不是
c,那为什么是标签呢? -
@Devolus 但它来自 C。这里的 C++ 只是一种检测编译器考虑的方法。
-
@Devolus 我同意 std::is_same 不是 c 但最初我在 c 代码中看到了这种用法(大小数组作为函数参数)
-
所有三个变体在 C 和 C++ 中都是相同的。没有像
func2那样声明数组大小的真正目的。该大小可能用于文档目的。 -
是的,作为函数参数的数组会自动衰减为指针,所以这 3 个提案是相同的(这也是为什么在函数体内没有“看到”大小的原因,
sizeof将返回指针的大小,而不是数组的大小)
标签: c++ arrays function arguments