C++ 数组不';如果通过模板函数中的常量引用传递,则t衰减到指针

C++ 数组不';如果通过模板函数中的常量引用传递,则t衰减到指针,c++,arrays,C++,Arrays,这个问题来自于这个问题: 但既然OP接受了答案,我想现在没人会读了 我在g++上尝试了这段代码。当传递到此函数时,数组似乎不会衰减为指针(函数返回正确的结果): #包括 模板 std::大小\u t大小\u数组(t常量和数组) { 返回sizeof(数组)/sizeof(*数组); } int main() { int a[5]; std::cout您编写函数不是为了接受指针,而是为了接受传递给它的目标类型的常量引用。指针衰减只有在尝试将数组的值分配给指针时才会发生。您编写函数不是为了接受指针

这个问题来自于这个问题:

但既然OP接受了答案,我想现在没人会读了

我在g++上尝试了这段代码。当传递到此函数时,数组似乎不会衰减为指针(函数返回正确的结果):

#包括
模板
std::大小\u t大小\u数组(t常量和数组)
{
返回sizeof(数组)/sizeof(*数组);
}
int main()
{
int a[5];

std::cout您编写函数不是为了接受指针,而是为了接受传递给它的目标类型的常量引用。指针衰减只有在尝试将数组的值分配给指针时才会发生。

您编写函数不是为了接受指针,而是为了接受常量引用引用传递给它的目标的确切类型。只有当您尝试将数组的值分配给指针时,才会发生指针衰减。

数组衰减不仅会发生,而且只会在程序在没有它的情况下无法编译时发生。当您通过引用传递数组时,根本不需要进行衰减

请注意,也可以编写函数模板,而无需分割丑陋的
sizeof
表达式:

template <typename T, std::size_t N>
std::size_t size_of_array(T (&array)[N])
{
    return N;
}
模板
std::size\u t数组的size\u(t(&数组)[N])
{
返回N;
}

当客户端调用数组的
size\u
时,
T
N
会由模板机制自动推断出来。

数组衰减不仅仅发生在没有它的情况下,它只会在程序无法编译时发生。当通过引用传递数组时,根本不需要衰减

请注意,也可以编写函数模板,而无需分割丑陋的
sizeof
表达式:

template <typename T, std::size_t N>
std::size_t size_of_array(T (&array)[N])
{
    return N;
}
模板
std::size\u t数组的size\u(t(&数组)[N])
{
返回N;
}

当客户端调用数组的
size\u
时,
T
N
由模板机制自动推断。

我的猜测是
T
类似于类型
int[5]
,所以不需要对指针进行衰减。但我不是专家。我的猜测是,
T
类似于类型
int[5]
,所以不需要对指针进行衰减。但我不是专家。不,当您将数组分配给指针时,数组指针将不会编译。@DeadMG:您正在反向读取它“pointer=array”==将指针分配给数组的值。这就是我的意思。不,当您将数组分配给指针时-数组的指针将不会编译。@DeadMG:您正在反向读取它“pointer=array”==将指针分配给数组的值。这就是我的意思。