多维点模板实现思考
来源:互联网 发布:mac如何剪切文件夹 编辑:程序博客网 时间:2024/06/05 09:41
在《深度探索C++对象模型》第一章提到的多维点的实现,这让我印象深刻。首先这样类似的代码我之前没有写过的(以前写过的是一位模板类型的类),其次其中间实现一点让我有点糊涂。先将代码贴出。
代码的第一部分是Point类的实现,两个模板参数第一个是Point点对应的类型,第二个是Point点对应的维度。这个代码是这类需求的一个例子。代码的第二部分是Point类的输出操
作符重载的实现。要注意加入template<class T,int dim>以及函数参数的表示inline ostream& operator<<(ostream& os,const Point<T,dim>& pt)
我的疑惑点:
这样code方式是正确,编译可以的,运行也正确的。
而这样的code方式编译是会出错的。编译的错误有两条:
1.Error C2057: expected constant expression
2.Error C2466: cannot allocate an array of constant size 0
我认为这里关键的问题是dim对应于底层实现不同导致的。
后者dim是普通变量,不是const类型的。这里就引出了C++数据在内存中存放多种方式。
在C++中内存分为5个区,它们是堆、栈、自由存储区、全局/静态存储区以及常量区。
堆是存放new操作分配的内存区,他们的释放不是编译器管理的,用户通过与new对应的delete操作符将对应的内存区域释放掉。如果程序员没有释放掉,那么在程序结束后,操作系统会自动回收。
栈是存放临时变量的,是由编译器需要的时候自动分配,不需要的时候自动释放的。常见的有局部变量以及函数参数等
自由存储区:是由那些malloc分配的内存区,它和堆相似,不过是由free来释放的。
全局/静态存储区,全局变量和静态变量被分配到同一块内存中,在以前的C语言中,全局变量又分为初始化的和未初始化的,在C++里面没有这个区分了,他们共同占用同一块内存区。
常量存储区,这是一块比较特殊的存储区,他们里面存放的是常量,不允许修改
上述的问题主要就可以解释了。
- 多维点模板实现思考
- 矩阵乘法 模板函数的实现 可以处理多维矩阵 c++
- 矩阵乘法 模板函数的实现 可以处理多维矩阵 c++ - utopiaT
- 读boost::multi_array有感,多维数组实现(非类型模板,偏特化)
- js多维对象数组的思考
- Vcotor实现多维数组
- 多维数组的实现
- JavaScript实现多维数组
- 多维数组的实现
- DataGridView实现多维表头
- DataGridView实现多维表头
- js实现多维数组
- 关于模板的思考
- C++几点思考
- 黄金分割点的思考
- 多维数组应该注意的几点
- 多维数据模型与OLAP实现
- 泛型实现多维数组
- 操作系统崩溃后还原的三种方法
- Java的安全学习(包括加密,数字签名,证书和认证)
- linux网桥设置MAC地址时的行为
- Flex类似js里面getElementById的方法
- 数据库
- 多维点模板实现思考
- Microsoft Dynamics AX API -Part 1 "Creating Jobs"
- 最基本:MyEclipse之HelloWorld
- 虚拟机上网 连接secureCRT的配置
- windows下如何修改右键菜单
- fhgtrrtyttyutyutyuytuyrtt
- Ext 学习笔记(一)Ext ComboBox
- 基于邻接矩阵的Prim算法(C语言实现)
- the client side call the wcf