gpt4 book ai didi

c++ - 如果通过模板函数中的 const 引用传递,数组不会衰减为指针

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:07:37 25 4
gpt4 key购买 nike

这个问题来自这个:

c++ pass array to function question

但由于 OP 接受了答案,我想现在没有人会阅读它。

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

#include <iostream>

template <typename T>
std::size_t size_of_array (T const & array)
{
return sizeof (array) / sizeof (*array);
}

int main ()
{
int a [5];
std::cout << size_of_array (a) << '\n';
}

另一个用户 (sharptooth) 说他在关闭内联的 VC++ 10 上有相同的行为。

谁能解释一下?谢谢。

最佳答案

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

注意函数模板也可以不划分丑陋的sizeof表达式来写:

template <typename T, std::size_t N>
std::size_t size_of_array(T (&array)[N])
{
return N;
}

当客户端调用 size_of_array 时,TN 由模板机制自动推导。

关于c++ - 如果通过模板函数中的 const 引用传递,数组不会衰减为指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7177221/

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