c – 如果在模板函数中通过const引用传递,则数组不会衰减到指针

c – 如果在模板函数中通过const引用传递,则数组不会衰减到指针,第1张

概述这个问题来自这个问题: c++ pass array to function question 但由于OP接受了答案,我想现在没人会读. 我在g上尝试了这个代码.看来,当传递给这个函数时,数组不会衰减指针(该函数返回正确的结果): #include <iostream>template <typename T>std::size_t size_of_array (T const & arr 这个问题来自这个问题:

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时,模板机制会自动推导出T和N.

总结

以上是内存溢出为你收集整理的c – 如果在模板函数中通过const引用传递,则数组不会衰减到指针全部内容,希望文章能够帮你解决c – 如果在模板函数中通过const引用传递,则数组不会衰减到指针所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1236636.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存