2.理解模板类型推导Array Arguments

本文探讨了C语言中数组作为参数传递时的行为变化,包括数组衰变为指针的过程、模板函数中数组参数类型的推导机制,以及如何利用这些特性来获取数组的实际大小。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. Array Arguments

const char name[] = "ZZH"; // name's type is
 // const char[13]
const char * ptrToName = name; // array decays to pointer

学过C语言的人 都知道 name的真实类型 是const char[13] ,他的目标类型是 const char
const char *的目标类型是 const char 所以他可以指向该数组

2. 那么当pass by value 传进去一个数组名,会被推断成什么类型呢?

template<typename T>
void f(T param); // template with by-value parameter

f(name); // what types are deduced for T and param?

我们在VS2019下 进行调试,发现param的类型被推断成了const char*,
因为在C语言中,数组形参都会被推断为指针

void Fun(int arr[100]);

这个就等同于int *arr

3. 接着我们把param改成引用

template<typename T>
void f(T& param); // template with by-reference parameter

f(name); // pass array to f

在VS2019下 param的类型是 const char[13]&
T的类型就是数组的真实类型 T is deduced to be const char [13]
书上说这 const char (&)[13]

我测试了一下 
const char(& a)[13] = param;

可以运行 二者一致

4. 我们可以根据上述 来得出一个数组的大小

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

cout << "Array Size " << ArraySize(name) << endl;
内容概要:本书《Deep Reinforcement Learning with Guaranteed Performance》探讨了基于李雅普诺夫方法的深度强化学习及其在非线性系统最优控制中的应用。书中提出了一种近似最优自适应控制方法,结合泰勒展开、神经网络、估计器设计及滑模控制思想,解决了不同场景下的跟踪控制问题。该方法不仅保证了性能指标的渐近收敛,还确保了跟踪误差的渐近收敛至零。此外,书中还涉及了执行器饱和、冗余解析等问题,并提出了新的冗余解析方法,验证了所提方法的有效性和优越性。 适合人群:研究生及以上学历的研究人员,特别是从事自适应/最优控制、机器人学和动态神经网络领域的学术界和工业界研究人员。 使用场景及目标:①研究非线性系统的最优控制问题,特别是在存在输入约束和系统动力学的情况下;②解决带有参数不确定性的线性和非线性系统的跟踪控制问题;③探索基于李雅普诺夫方法的深度强化学习在非线性系统控制中的应用;④设计和验证针对冗余机械臂的新型冗余解析方法。 其他说明:本书分为七章,每章内容相对独立,便于读者理解。书中不仅提供了理论分析,还通过实际应用(如欠驱动船舶、冗余机械臂)验证了所提方法的有效性。此外,作者鼓励读者通过仿真和实验进一步验证书中提出的理论和技术。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值