effective c++ 学习笔记1:让自己习惯C++
来源:互联网 发布:手机性能测评软件 编辑:程序博客网 时间:2024/04/29 16:03
条款01:视C++为一个语言联邦
如今的C++已经是一个多重范型编程语言,一个同时支持下面几种形式的语言。
①:支持过程形式(procedural);②:支持面向对象形式(object-oriented);③:支持函数形式(functional)(这里是指lambda么);④:支持范型形式(generic),如STL;⑤:元编程形式(metaporgramming)
这里我google了一下“元编程(Metaprogramming)”,找到的居然是百度百科的词条.....
元编程(Metaprogramming)是指某类计算机程序的编写,这类计算机程序编写或者操纵其他程序(或者自身)作为它们的数据,或者在编译时完成部分本应在运行时完成的工作。很多情况下比手工编写全部代码相比工作效率更高。编写元程序的语言称之为元语言,被操作的语言称之为目标语言。一门语言同时也是自身的元语言的能力称之为反射。
反射是促进元编程的一种很有价值的语言特性。把编程语言自身作为头等对象(如Lisp或Rebol)也很有用。支持泛型编程的语言也使用元编程能力。
元编程通常有两种方式起作用。一种方式是通过应用程序接口(API)来暴露运行时引擎的内部信息。另一种方法是动态执行包含编程命令的字符串。因此,“程序能编写程序”。虽然两种方法都能用,但大多数方法主要靠其中一种。
C++中也可以使用模板来进行元编程(以下代码在VC2008中编译通过):#include<iostream>using namespace std;int Result;//主模板template<int N> //模板class Fibonacci{public:enum{Result = Fibonacci<N-1>::Result + Fibonacci<N-2>::Result };//枚举,带有隐含计算};//完全特化模板template<>class Fibonacci<1> //带常参数1的构造函数{public:enum { Result = 1 };//给枚举赋初值1};//完全特化模板template<>class Fibonacci<0> //带参数0的模板{public:enum { Result = 0 };//给枚举赋初值0};int main(){std::cout << "第20项的Fibonacci数是:" << Fibonacci<20>::Result << std::endl;//隐含计算system("pause");return 1;}该示例定义了一个类模板,类中声明了一个枚举类型,该程序的奥秘就在枚举类型的构造上。从枚举类型的构造可以看出,他自身有一个样俺的迭代计算。两个构造函数为枚举类型初始化了数列的初始值,当调用“Fibonacci<20>::Reasult“时,就以这两个初始值为基础进行迭代。因此,程序在运行时并没有显示的计算,而是在编译时就由编译器计算了。当编译器实例化Fibonacci<20>时,为了给其enum Result赋值,编译器需要对Fibonacci<19>和Fibonacci<18>进行实例化,之后同理······,当实例化到Fibonacci<1>和Fibonacci<0>的时候,完全特化模板被实例化,至此迭代结束。所以,该程序编译的结果仅包含一个常量值,输出如下:第20项的Fibonacci数是:6765==========不是所有的元编程都用产生式编程。如果程序可以在运行时改变(如Lisp、Ruby、Python、Smalltalk、Lua、Groovy和JavaScript),这种技术可以不实际生成源代码就使用元编程。我们该如何理解这个语言呢,最简单的方法就是将其视为一个由相关语言组成的联邦而非单一语言。
C++的主要四个次要语言分别为:C, Object-Oriented C++,Template C++,STL。
0 0
- Effective C++学习笔记一(让自己习惯C++)
- 《Effective C++》1-让自己习惯C++
- 【读书笔记】Effective C++-1 让自己习惯C++(之一)
- 【读书笔记】Effective C++-1 让自己习惯C++(之二)
- 【读书笔记】Effective C++-1 让自己习惯C++(之三)
- 《Effective C++》让自己习惯C++:条款1-条款4
- Effective C++(一)让自己习惯C++
- Effective C++(一)让自己习惯C++
- effective c++-让自己习惯c++
- 《Effective C++》第一章:让自己习惯C++
- Effective C++读书笔记1(让自己习惯C++)
- Effective C++读书笔记1(让自己习惯C++)
- <<Effective C++>>读书笔记1: 让自己习惯C++
- effective c++ 学习笔记1:让自己习惯C++
- Effective C++(一)让自己习惯C++
- 《Effective C++》 读书笔记(一) 让自己习惯C++
- 【Effective C++】条款01-让自己习惯c++
- Effective C++ 第一章(让自己习惯C++)
- memcached服务安装
- 不使用Cygwin,在eclipse中快速开发JNI,一键生成C头文件.h,以及一键使用NDK交叉编译
- 深入理解HTTP协议
- textarea 标签 大小不可变
- Android实现推送方式解决方案
- effective c++ 学习笔记1:让自己习惯C++
- 《编写高质量代码改善C++程序的150个建议》简要归纳
- 扩展方法
- NSTimer
- poj1950(dfs)
- VC6.0重装后新建选项卡中没有关于MFC工程的选项的解决方案
- 安装Linux到开发板
- define 函数 C++
- 深圳宝安工控机硬盘克隆