C++ STL开发温习与总结(二): 2.C++存储技术

8 篇文章 1 订阅

若该文为原创文章,转载请注明原文出处
本文章博客地址:http://blog.csdn.net/qq21497936/article/details/77937996

长期持续带来更多项目与技术分享,咨询请加QQ:21497936、微信:yangsir198808

红胖子(红模仿)的博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬结合等等)持续更新中...

其他(编程相关)

上一篇:C++ STL开发温习与总结(一): 1.C++编程技术

下一篇:C++ STL开发温习与总结(三): 3.C++函数技术

 

前言

      使用了多年C++,没有系统的温习总结过,所以准备温习《C++STL程序员开发指南》,本系列篇章将会是温习总结该书本概念和技术。

      本节讨论的C++存储技术保局哦C++存储类型,C++存储修饰符和C++对象的生存期三部分。

1 C++存储类型

      C++存储分类型告诉编译程序如何存储变量,主要有三种类型extern存储类型,static存储类型和register存储类型。

1-1 extern存储类型

      由于C语言允许将分别编译的达程序的各个模块连接在一起,以提高编译速度,协作大项目管理,因此必须将程序需要的所有全局变量通过某称方法告知所有文件。

      解决上述文档的方法:在一个文件中说明所有全局变量,在另一个文件中使用extern再次描述它们。当在函数内部使用一个全局变量,而它又是在同一文件内说明时,可以选用extern,但一般很少这么做,在C++面向对象编程方法当中这种方法几乎已经不使用,而只是在C语言的源代码中经常可以看见这种方法的身影。

1-2 static存储类型

      静态变量无论在函数中或在文件中都是稳定的便娘。静态局部变量可以使编译产生与全局变量相同的永久性存储区,其差异是静态局部变量仅对于说明它的模块内可知。

      将分类型static用于全局变量,会使编译器程序建立起仅在说明该全局变量的文件中可以认知的全局变量

1-3 regsiter存储类型

      regsiter存储类型仅用于int型和char类型变量(而ANSIC标准拓展了regsiter的定义范围,使其可用于修饰各种类型比纳凉)。通常,regsiter要求编译程序将它所说明的变量值保存在CPU的寄存器中,这样其运算就大大快于普通变量的运算。

      类似数组那样的大结构对象显然不能放在寄存器中,但编译程序将优化处理他们。

      register仅可用于局部变量和函数的形式参数,因为这些变量都是缺省的自动变量。由于register变量可以提高速度,因此它是最理想的循环控制变量。但在实际应用中,由于在同一时刻获取优化速度的register变量有限(一个函数中所允许的寄存器变量的数目取决于处理器类型以及所指定的C语言的编译程序),所以,应该将其用到最能发挥作用的地方,如多次引用同一变量的场合。

2 C++存储修饰符

      用于控制对变量的存取或修改方法的修饰符有:const(常数型)、volatile(暂态型)。

2-1 const-常数型

      const型变量在程序执行期间是不可以改变的(const变量可以赋初值)编译程序可以随意将这些变量放到只读存储器(Rom)中。

      const变量的用途:可以阻止参数被函数修改,即当一个指针传送给一个函数后,函数肯呢个修改该指针所指向的变量,如果指针在参数说明段用const修饰,函数就无法修改指针所指的内容了。

      通常,当一个标准库函数不避修改调用参数指引的对象时,参数则用const来描述。const型变量可以被用户的程序之外的东西修改,例如硬件设备可以给const变量赋值。

2-2 volatile-暂态型 

      修饰符volatile通知编译程序:变量值可能由程序中没有显示说明的方式所改变。例如:全局变量的地址可能被传递到操作系统的时钟子程序,用来保存系统实时时间。

      引用volatile的原因:大多数C编译程序都假定表达式内部的内存不变,并以这一假定来自动优化某些表达式。有些编译程序在编译过程中还改变表达式的计算顺序,volatile可以防止这些改变的发生。

      const和volatile可以一起使用,例如:如果假定0x30是仅由外部条件改变的端口值,那么下面说明即可以消除用户希望防止的所有偶尔副作用。

const volatileunsigned char * port = 0x30;

3 C++对象的生存期

      不同的对象生存期不同。按生存期的对象可分为如下三种:

- 局部变量:当对象被定义时调用构造函数,该对象被创建,当程序退出定义该对象所在的函数或程序块时,调用析构函数,释放该对象。

- 静态对象:当程序第一次执行所定义的静态对象时,该对象被创建,当程序结束时,该对象被释放。

- 全局对象:当程序开始时,调用构造函数创建该对象,当程序结束时调用析构函数释放该对象。

3-1 类的作用域

      类域,它是指在类的定义中由一对花括号所括起来的部分。每一个类都具有该类的类域,该类的成员局部在该类所述的类域中。

      在类的定义中可知,类域中可以定义变量,也可以定义函数。从这一点上看类域与文件域很相似。但是,类型又不同于文件域,在类域中定义的变量不能使用auto、register、extern等修饰符,只能用static修饰符,而定义的函数也不能 extern等修饰符。另外,在类域中的静态成员和成员函数还具有外部的连接属性。

      类域小于文件域。

3-2 局部类和嵌套类

      在一个函数提内定义的类成为局部类。局部类中只能使用它的外围作用域中的对象和函数进行联系,因为外围作用域的中的变量与该局部类的对象无关。在定义局部类时需要注意:局部类中不能说明静态成员函数,并且所有成员函数都必须定义在类体内。在实践中,局部类是很少使用的。

int a;
void fun();
{
       staticint a;
       classA { public: void init(int i) {a = i;}
};
A m;
m.init(10);

      在一个类中定义的类成为嵌套类,定义嵌套类的类型为外围类。定义嵌套类的目的在于隐藏类名,减少全局的标识符,从而显示用户能否使用该类简历对象。这样可以提高类的抽象能力,并且强调两个类(外围类和嵌套类)之间的主从关系。

class A:
{
public:
       classB{public: … private: …};
       voidf();
private:
       int a;
}

      其中,类B是一个嵌套类,类A是外围类,类B定义在类A的类体内。以下对嵌套类的若干说明:

- 从作用域的角度看,嵌套类被隐藏在外围类之中,该类名只能在外围类中使用。如果在外围类的作用域内使用该类名时,则需要加名字限定。

- 从访问权限的角度看,嵌套类名与它的外围类的对象成员名具有相同的访问权限规则。不能访问嵌套类的私有成员函数,也不能对外围类的私有部分中的嵌套类建立对象。

- 嵌套类中的成员函数可以在它的类体外定义。

- 嵌套类中说明的成员不是外围类中对象的成员,反之亦然。嵌套类的成员函数对外围类的成员没有访问权限,反之依然,在分析嵌套类与外围类的成员访问关系时,往往把嵌套类看作非嵌套类来处理。这样,上述的嵌套类可写成如下格式:

class A {public : void f(); private: int a;};
class B {public : … private: …}

由此可见,嵌套类仅仅是语法上的嵌入。

- 在嵌套类中说明的友元对外围类的成员没有访问权。

- 如果嵌套类比较复杂,可以只在外围类中对嵌套类进行说明,关于嵌套的详细的内容可在外围类意外的文件域中进行定义。

 

上一篇:C++ STL开发温习与总结(一): 1.C++编程技术

下一篇:C++ STL开发温习与总结(三): 3.C++函数技术

 

若该文为原创文章,转载请注明原文出处
本文章博客地址:http://blog.csdn.net/qq21497936/article/details/77937996

 

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 《STL开发技术导引》是一本介绍C++标准库STL的书籍。作者叶至军通过实际例子和详细的解释,帮助读者理解和使用STL。 这本书由6个章节组成,分别介绍了STL的各个部分,包括序列容器、关联容器、迭代器、算法、函数对象和仿函数、空间分配器等。每个章节都包括许多例子和练习题,帮助读者掌握STL的知识和技能。 叶至军在书中详细讲解了STL的设计思想和内部实现原理,使读者能深入了解STL的工作原理和性能优化技巧。同时,作者还介绍了一些STL的扩展和应用,如STL的多线程编程、内存池管理等,这些内容可以帮助读者在实际工程开发中更好地使用STL。 除了STL的基础内容外,作者还介绍了一些STL和其他C++库的结合使用,如Boost库、Qt等,帮助读者深入了解C++开发的整体技术架构。 总之,《STL开发技术导引》是一本非常实用的C++技术书籍,适合C++开发者、算法研究员和高级程序员阅读和学习。它不仅能够帮助读者掌握STL的使用技能,而且还能够帮助读者提高C++编程水平,更好地应对实际开发需求。 ### 回答2: 《STL开发技术导引》是一本介绍STL(Standard Template Library)的技术书籍,作者为叶至军。STL是C++标准库的一部分,是一套可复用、高效、通用的模板类和函数的集合,包括容器(如vector、list、set、map等)、算法(如sort、find、transform等)和迭代器(如input iterator、output iterator等)等。本书包含了STL的一些高级应用和实践技巧,适合有一定编程基础的读者阅读。 本书主要分为以下几个部分: 第一部分是STL基础介绍,包括STL的起源和发展、STL的设计思路、STL中的常用容器和算法等。 第二部分是STL高级应用,包括STL的实现和优化、STL的内存管理、STL和多线程、STL和跨平台等。 第三部分是STL的实践技巧,包括STL的调试、STL的异常处理、STL的拓展等。 本书还提供了书签功能,方便读者快速浏览和回顾重要内容。同时,本书也提供了大量实例和演示程序,帮助读者更深入地理解和应用STL。 总的来说,本书是一本不错的STL技术书籍,适合想要深入学习和应用STL的程序员阅读。 ### 回答3: 《STL开发技术导引》是一本介绍STL编程技巧和实现原理的优秀参考书。本书由叶至军所著,全书分5个部分19章节,深入剖析了STL各个组件的实现原理和使用方法。 第一部分是STL初探,讲述了容器、迭代器和算法这三个重要的部分。第二部分是STL的实现原理,详细介绍了迭代器设计、容器设计和算法设计的实现过程。第三部分是STL的应用技巧,通过具体的场景示例,深入浅出地阐述了STL的使用方法。第四部分是STL扩展,介绍了扩展STL的方法和技巧。第五部分是STL的未来,讨论了C++17的新特性和STL未来发展方向。 书籍结构清晰,内容详实,适合初学者和有一定经验的开发者阅读。在阅读过程中,可以按照书签分类阅读,极大地提高了学习效率。总之,如果想深入学习STL编程技巧和实现原理,读这本书必将受益匪浅。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

长沙红胖子Qt

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值