介绍c++模板编程的很多书,一般上来都拿模板的数值计算举例,这对于理解模板原理很有帮助,但感觉实际上很少用到,并且存在一些问题,比如以下是我写的一个用模板进行数值的代码:
#include "stdafx.h"
#include <iostream>
template<int N>
struct Cal
{
static const int value = Cal<N-1>::value + N;
};
template<>
struct Cal<1>
{
static const int value = 1;
};
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
cout << Cal<100>::value << endl;
return 0;
}
在计算Cal<100>::value时,会调用 Cal<100-1>::value + N,实例化模板Cal<99>, 这样一层层的递归下去直到Cal<1>为止,这意味着编译器会生成从Cal<1>到Cal<100>这100个结构体,当N很大时,有两个问题:
- 1.内存的消耗是难免的
- 2.编译器报错(比如设N=1000时):recursive type or function dependency context too complex
模板的优势是类型计算,不过真做起项目来恐怕很难用到,算是咱c++程序员自娱自乐的工具吧~
分享到:
相关推荐
9. **慎用竖线**:在文本中,竖线可能被误识别为字母'l',可能导致信息误读。在输入数据或分隔项目时,可以使用逗号或分号代替。 遵循以上建议,你的信息工程工作简历将更加专业,更容易被潜在雇主注意到。同时,...
以下内容将详细说明借条的各个要素及其重要性,并提供相应的范本模板,以助于读者更好地理解借条的规范格式及法律效力。 **借条的基本要素** 一个标准的借条应包括但不限于以下基本要素: 1. **借款人与出借人的...
在金融借贷活动中,一份详尽完备的借款担保合同对于保障借贷双方的权益至关重要。《最新借款担保合同》作为一种规范化的法律文件,通过明确...因此,在签订任何合同之前,都应当慎之又慎,以确保每一方的利益不受损害。
4. **慎用“全站专题”功能**:全站专题可能导致跨频道查询,增加性能开销。若非必要,避免使用此功能。 5. **避免过度使用“自定义字段”**:自定义字段虽能增加功能,但会降低性能。除非必须,否则不推荐使用。 ...
- **慎用三线过滤和各向异性过滤**:虽然这两种过滤方法可以提高图像质量,但它们也会显著增加计算成本。 - **用纹理查找代替复杂的函数**:在某些情况下,使用纹理查找可以替代复杂的数学函数,减少计算时间。 ###...
2. 慎用全局变量:全局变量容易导致命名冲突和难以调试的问题,应尽量避免使用。 3. 委托构造函数:利用一个构造函数调用另一个构造函数,可以简化代码并确保一致性。 4. 避免隐式类型转换:默认构造函数和隐式类型...
6. **模板与泛型编程**:慎用全局模板函数,优先考虑类模板,减少编译期依赖,提高编译效率。 7. **多线程编程**:使用标准库中的线程支持,确保线程安全,避免数据竞争,合理使用锁和同步原语。 8. **代码复用与...
俗话说“热在三伏”,真正的暑热天气是以夏至和立秋为基点计算的。大约在七月中旬到八月中旬,中国各地的气温均为最高,有些地区的最高气温可达40度左右。 “不过夏至不热”,“夏至三庚数头伏”。夏至虽表示炎热的...
2. **预处理器宏的慎用**: 虽然预处理器宏在某些场景下很有用,但过度使用可能导致代码难以理解和维护。优先考虑使用模板、枚举类或者const函数来替代宏。 3. **异常安全编程**: VC++支持异常处理,确保在抛出...
**原则2.2 慎用无符号类型** - 除非特别需要,否则避免使用无符号类型。 - 示例:`unsigned int`。 **原则2.3 少用浮点数除非必须** - 浮点数计算可能存在精度问题,应在必要时使用。 - 示例:`double`。 **原则...
5. **慎用内联过滤器** 内联过滤器会导致模型在 `$digest` 循环中执行两次,影响性能。推荐将过滤器移到控制器或服务中,使用 `$filter` 服务来调用过滤器函数,如: ```javascript var filteredArray = $filter...
9. **预处理器宏**:慎用宏,因其可能导致意料之外的行为。优先考虑使用模板和常量表达式。 10. **测试驱动开发**:编写单元测试以验证代码功能,确保修改不会引入新的问题。使用测试框架如Google Test进行自动化...
- 慎用`final`关键字,虽然`final`能提升编译器优化,但过多的`final`变量可能导致内存无法释放。 3. **算法与数据结构**: - 根据数据特性选择合适的数据结构,如使用`HashMap`而非`ArrayList`进行快速查找,...
需要注意的是,`eval()`函数会执行字符串内的表达式,因此在不确定输入安全性的情况下慎用。 在Python的命名规则中,合法标识符(变量名、函数名等)不能以数字开头,且不应与Python的保留字冲突。保留字如`if`, `...
优惠券可以管理员添加、也可以由客户用积分换取 优惠券可设置使用期限和使用条件 12)订购邮件提醒:客户订购成功后可以收到网站自动发出的邮件 具体邮件内容由管理员后台设置 13)管理员发货后系统自动发送邮件...
优惠券可以管理员添加、也可以由客户用积分换取 优惠券可设置使用期限和使用条件 12)订购邮件提醒:客户订购成功后可以收到网站自动发出的邮件 具体邮件内容由管理员后台设置 13)管理员发货后系统自动发送邮件...
优惠券可以管理员添加、也可以由客户用积分换取 优惠券可设置使用期限和使用条件 12)订购邮件提醒:客户订购成功后可以收到网站自动发出的邮件 具体邮件内容由管理员后台设置 13)管理员发货后系统自动发送邮件...
优惠券可以管理员添加、也可以由客户用积分换取 优惠券可设置使用期限和使用条件 12)订购邮件提醒:客户订购成功后可以收到网站自动发出的邮件 具体邮件内容由管理员后台设置 13)管理员发货后系统自动发送邮件...
- **继承的选择**:慎用继承,优先考虑组合,以减少耦合度。 - **作用域**:合理使用作用域,如局部变量应在最小范围内声明和使用。 - **避免使用“魔术数字”**:使用常量代替具体的数字,提高代码的可读性和可维护...
指示 map 命令显示高级 RISC 计算 (ARC)设备名称而不是设备名称。以下是 ARC 设备名称的范例: multi(0)disk(0)rdisk(0)partition(1) 等价的设备名称是: DeviceHardDisk0Partition1 范例 下例将...