`
nathan09
  • 浏览: 144715 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

【读书笔记】Effective C++-1 让自己习惯C++(之二)

 
阅读更多

Effective C++读书笔记

--By Nathan.Yu 2007-11-11--

1 让自己习惯C++()

条款03:尽可能使用const

const允许你指定一个语义约束(也就是指定一个“不该被改动”的对象),而编译器会强制实施这项约束。

const的用处修饰globalnamespace作用域中的常量;或修饰文件、函数、或区块作用域中被声明为static的对象;也可以修饰classes内的staticnon-static成员变量;修饰指针(迭代器)及它们所指定对象等。而最具威力的用法是在函数声明中,在一个函数声明内,const可以和函数返回值、参数、函数自身(成员函数)产生关联。

const与指针:如果关键字const出现在星号左边(类型之前或之后一样),表示被指物是常量;如果出现在星号右边,表示指针本身是常量;如果出现在星号两边,表示被指物和指针都是常量。

const与迭代器:声明迭代器为const(即const ..::iterator xóT* const x)表示这个迭代器不能指向不同的东西,但它指向的东西是可以改动的。如果希望迭代器所指定东西不可被改动,可使用const_iterator;

【要点摘录】一个“良好的用户自定义类型”的特征是它们避免无端的与内置类型不兼容。

const成员函数:将const实施与成员函数的目的,是为了确认该成员函数可作用于const对象(当然也可作用于非const对象),而非const成员函数则只能作用与非const对象。

const成员函数使“操作const对象”成为可能,这对编写高效代码是个关键。因为改善C++程序效率的一个根本方法是以pass-by-referenct-to-const方式传递对象,而此技术可行的前提是我们有const成员函数可用来处理取得(并经修饰而成)的const对象

<在普通的非const成员函数中,this指针的类型是T* const this的,可以改变所指物,但不能改变指针本身;在const成员函数中,this指针的类型是const T* const this的,二者都不能改变>

【要点摘录】两个成员函数如果只是常量性不同,可以被重载。这实在是一个重要的C++特性。

【要点摘录】如果函数的返回类型是个内置类型,那么改动函数返回值从来就是不合法的。如:int f(); f()=1;是不合法的!

关于const成员函数的两个学派:bitwise constness(又称physical constness)logical constness

mutable(可变的)关键字:释放掉non-static成员变量的bitwise constness约束,使在成员函数中可修改const成员的值。

constnon-const成员函数中避免重复:

允许non-const调用const,而不允许const调用non-const。因为const成员函数调用non-const成员函数时,对象有可能被改动。const调用non-const时,必须用const_cast*this上的const性质去掉才能调用,这是不安全的做法。

请记住:

1、将某些东西声明为const可帮助编译器侦测出错误用法。const可被施加于任何作用域内的对象、函数参数、函数返回类型、成员函数本体。

2、编译器强制实施bitwise constness,但你编写程序时应该使用“概念上的常量性”(conceptual constness)。

3、当constnon-const成员函数有着实质等价的实现时,令non-const版本调用const版本可避免代码重复。

分享到:
评论

相关推荐

    effective c++读书笔记

    effective c++读书笔记和总结 effective c++读书笔记和总结

    effective C++读书笔记

    effective C++读书笔记,effective C++读书笔记,effective C++读书笔记

    effective C++ 读书笔记

    effective C++ 很好 很不错 最好的C++进阶资料

    Effective Modern C++学习笔记

    《Effective Modern C++:改善C++11和C++14的42个具体做法(影印版)(英文版)》中包括以下主题:剖析花括号初始化、noexcept规范、完美转发、智能指针make函数的优缺点;讲解std∷move,std∷forward,rvalue引用和全局...

    Effective C++学习笔记

    Effective C++学习笔记 没有时间看Effictive C++书的人可以看看这个笔记 总结出了重点啊 适合有c++基础的人阅读

    effective c++笔记1

    effective c++笔记1

    Effective C++笔记1

    Effective C++笔记1

    effective C++ 读书笔记 PPT

    摘录了《Effective C++》 (Scott Meyers 著)中有参考价值的编写代码建议,方面阅读

    Effective C++第三版及详细笔记

    内容简介:有人说C++程序员可以分为两类,读过Effective C++的和没读过的。当您读过《Effective C++:改善程序与设计的55个具体做法(第3版)(中文版)(双色)》之后,就获得了迅速提升自己C++功力的一个契机。

    Effective C++学习笔记.doc

    自己整理的侯捷版本&lt;&lt;Effective C++ 改善程序与设计的55个具体做法&gt;&gt; 学习笔记.

    Effective_C++_3rd笔记.pdf

    Effective_C++_3rd 读书笔记 pdf

    Effective C++ Roy T 读书笔记。

    Effective C++ Roy T 读书笔记,比较老的一本书,探讨一下C++。

    C++Effective STL笔记

    C++ Effective STL笔记,供C++初学者学习参考。。。。。

    effective C++ (3rd) 学习笔记

    经典书籍 effective c++的学习笔记,一共31页,总结的很好,基本上是把原书的精华内容再加上自己的理解写在了这份文档中,适合打印出来细看。

    Effective_C++_笔记

    通常C++要求你对所使用的任何东西提供一个定义式,但如果它是个class专属常量 又是static且为整数类型(integral type,例如int,char,bool),则可特殊处理。只要不取它们 的地址,你可以声明并使用它们而无需提供...

    C++书籍阅读笔记

    深入探索C++对象模型,Effective STL,more effective c++,C陷阱与缺陷,都是阅读笔记

    c++笔记学习心得笔记

    c++笔记学习心得笔记,年多的C++学习过程中,自己阅读了很多C++经典著作,有《effective c++》,《more effective c++》,《c++ primer》等,每次阅读著作都会总结一些心得,现在拿出来和大家分享一下。

    Effective C++中文版

    Effective C++_中文版. 数据C++中的高级进阶类书籍,本文档可以复制,非影印版

Global site tag (gtag.js) - Google Analytics