当前位置:网站首页>什么是混合元编程
什么是混合元编程
2022-08-01 13:12:00 【发如雪-ty】
有两个数组:
int a[3] = {
1,3,5};
int b[3] = {
2,4,6}
计算数组a和数组b的点积和,如果不用循环,还能做到正确的相加,那自然是效率最高的实现手段。也就是下面的代码:
int nResult = a[0] * b[0] + a[1] * b[1] + a[2] * b[2];
但是数组中元素的数量是不确定的,所以混合元编程就登场了。看如下的代码:
template<typename T, int U>
struct DotProduct
{
static T Result(T* a, T* b)
{
return (*a)* (*b) + DotProduct<T, U - 1>::Result(a + 1, b + 1);
}
};
template<typename T>
struct DotProduct<T,0>
{
static T Result(T* a, T* b)
{
return T{
};
}
};
void main()
{
int a[] = {
1,3,5 };
int b[] = {
2,4,6 };
int nResult = a[0] * b[0] + a[1] * b[1] + a[2] * b[2];
cout << nResult << endl;
nResult = DotProduct<int, 3>::Result(a, b);
cout << nResult << endl;
system("pause");
}
结果:
从上述结果可以看出,达到了不用循环实现了计算两个数组点击的效果。
其实nResult = DotProduct<int, 3>::Result(a, b);
等价于
nResult = (*a) * (*b) + (*(a+1)) * (*(b+1)) +(*(a+2)) * (*(b+2));
在这里编译器根据这段代码编译(生成)出一段新的代码,实现程序真正功能的是这段新的代码,也就是说混合元编程经过编译后能生成一段代码,这段代码实现了数组a和数组b真正的点击计算。
因为混合元编程的存在,在看待c++编译器编译c++程序这件事情上,把整个编译过程可以分成两个阶段是比较合适的,分别是前期阶段和后期阶段。
前期阶段的C++编译器实际上充当了解释器的角色,直接针对程序员开发的c++源码(元编程代码)进行解释执行,这一阶段的工作就是产生一些列c++代码。
后期阶段的c++编译器恢复了我们比较熟悉的c++编译器本来应该具备的功能:针对前期阶段产生的结果代码进行编译、链接、最终生成可执行程序。
边栏推荐
- Find objects with the same property value Cumulative number Summarize
- 论文详读《基于改进 LeNet-5 模型的手写体中文识别》,未完待补充
- Feign 从注册到调用原理分析
- HMS Core音频编辑服务音源分离与空间音频渲染,助力快速进入3D音频的世界
- 为什么最大值加一等于最小值
- 芝加哥丰田技术学院 | Leveraging Natural Supervision for Language Representation Learning and Generation(利用自然监督进行语言表示学习和生成)
- formatdatetime function mysql (date sub function)
- 华盛顿大学、Allen AI 等联合 | RealTime QA: What's the Answer Right Now?(实时 QA:现在的答案是什么?)
- MCU开发是什么?国内MCU产业现状如何
- 快速理解拉格朗日乘子法
猜你喜欢
随机推荐
通讯录(静态版)(C语言)(VS)
NebulaGraph v3.2.0 性能报告
多线程案例——阻塞式队列
测试发文
芝加哥丰田技术学院 | Leveraging Natural Supervision for Language Representation Learning and Generation(利用自然监督进行语言表示学习和生成)
态路小课堂丨浅谈优质光模块需要具备的条件!
How to Integrate Your Service Registry with Istio?
快速幂---学习笔记
实现集中式身份认证管理的案例
Beyond Compare 4 trial period expires
关于Request复用的那点破事儿。研究明白了,给你汇报一下。
mysql的基本使用
什么是一致性哈希?可以应用在哪些场景?
34、树莓派进行人体姿态检测并进行语音播报
How do we do full-link grayscale on the database?
大中型网站列表页翻页过多怎么优化?
How does the SAP ABAP OData service support the Create operation trial version
Alibaba Cloud Official Redis Development Specification
透过开发抽奖小程序,体会创新与迭代
模型运营是做什么的(概念模型数据库)