`
暴风雪
  • 浏览: 388815 次
  • 性别: Icon_minigender_2
  • 来自: 杭州
社区版块
存档分类
最新评论

《Effective C艹》读书笔记(3)

    博客分类:
  • C艹
 
阅读更多

条款04:确定对象被使用前已先被初始化

    读取未初始化的值会导致程序发生不明确的行为。对于内置类型以外的其他任何类型,初始化的责任落在了构造函数身上。

    在落实这个规则的时候要注意,不要混淆了赋值和初始化 。

    

class ca{
    int a;
};
class cb{
    int a;
    string b;
    vector<ca> c;
    cb(const int& aa,const string& bb,const vector<ca> cc){
        a=aa;           //这些都是赋值!
        b=bb;           //而不是初始化!
        c=cc;
    }
};

     对于上面的程序,并不是高效率的做法,在构造函数内,变量都不是被初始化,而是被赋值(内置类型除外)。这意味着,首先调用默认的构造函数来为bb,cc设初值,然后再立刻为他们赋值。默认构造函数所做的工作就被浪费了。

    一种更好的写法是使用成员初值列,代码如下

class cb{
    int a;
    string b;
    vector<ca> c;
    cb(const int& aa,const string& bb,const vector<ca> cc):
        a(aa),
        b(bb),
        c(cc){}
};

     对于大多数类型而言,比起现调用default构造函数再调用赋值操作符,单调用一次copy构造函数是更高效的。

    请立下一个规则,规定总是在初值列中列出所有的成员变量,以避免某些变量未被初始化。

    有些情况下,即使面对的成员变量是内置类型,也必须要用初值列,而不能被赋值(例如const变量和引用变量)。

    class内变量初始化的顺序总是和他们在类内声明的顺序是相同的。为了方便阅读,在成员初值列中列出各个成员时,总是按照其声明的次序为次序。

 

    请以local static代替non-local static。

    例如我们在文件1中定义 int a = 1;

           我们在文件2中定义 extern int a;int b = a*3;

     如果文件2在文件1之前被调用,那么b值就有可能是垃圾值。为了避免这种问题,我们应该避免使变量具有全局的作用域 ,具体的做法就是以local static来代替non-local static,代码如下

int& getA(){  //文件1中
    static int a = 1;
    return a;
}

int b = getA()*3;//文件2中

 这样做就能保证a的初始化在前了

 

1
1
分享到:
评论

相关推荐

    精版Effective STL读书笔记

    根据给定的文件信息,以下是对“精版Effective STL读书笔记”的详细解析,重点提炼了STL(标准模板库)中的关键知识点。 ### 标题:“精版Effective STL读书笔记” 此标题暗示了文档是针对《Effective STL》一书的...

    effective c++读书笔记

    从给出的部分内容来看,读书笔记主要聚焦于以下几个知识点: 1. C++语言的联邦概念:C++是一个由多个次语言构成的语言联邦,这包括了C语言核心、面向对象的C++、模板C++以及标准模板库(STL)。这种理解对于深入...

    Effective Java读书笔记.pdf

    "Effective Java读书笔记" Effective Java是一本关于Java编程语言的经典书籍,本笔记主要总结了Java语言的发展历程、静态工厂方法的应用、构造器模式的使用等重要知识点。 一、Java语言的发展历程 Java语言的发展...

    effective python学习笔记.pdf

    记录了我的effective-Python学习笔记,精简了effective-Python中重要的部分。effective-Python是一本值得多看几遍的书,但是看后面的几遍的时候完全可以直接看自己的学习笔记。此学习笔记侧重与比较实用的部分即前四...

    Effective Modern C++学习笔记

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

    effective java 读书笔记

    《Effective Java》是Java开发领域的经典著作,作者Joshua Bloch深入浅出地阐述了编写高效、健壮的Java代码的技巧和最佳实践。以下是对该书部分内容的详细解释: 1. **产生和销毁对象** - Item1:静态工厂方法相比...

    effective C++ 读书笔记

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

    effective C++读书笔记

    本文总结了Effective C++读书笔记,涵盖了C++的四个主要次语言:C、Object-Oriented C++、Template C++和STL。同时,文章还讨论了高效编程守则,包括使用const、enum和inline替换#define,使用const来告诉编译器和...

    Effective-Java读书笔记

    《Effective Java》是Java...以上仅是《Effective Java》一书中部分核心知识点的概述,实际的读书笔记中会更详细地解释这些概念,并给出具体的示例代码。通过深入学习和实践,开发者可以极大地提升其Java编程的水平。

    读书笔记:Effective Java中文版第3版笔记.zip

    读书笔记:Effective Java中文版第3版笔记

    effective C++ 读书笔记 PPT

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

    Effective-Java读书笔记(上)

    ### Effective Java读书笔记(上) #### 第一章 引言 本书主要针对Java开发者提供了大量实用的编程指导建议,帮助读者提升代码质量和程序性能。在本章节中,我们将重点介绍对象的创建与销毁,以及一些重要的设计...

    读书笔记:读Effective Java中文版第3版阅读源码测试案列.zip

    读书笔记:读Effective Java中文版第3版阅读源码测试案列

    Effective_C++3 学习笔记.pdf.rar

    通过阅读这份详尽的《Effective C++3 学习笔记》,读者不仅可以深入了解C++语言的高级特性,还能掌握编写高效、安全的C++代码的最佳实践。对于任何渴望提升C++编程技能的开发者来说,这是一份不可或缺的参考资料。

    Effective_C++_笔记

    1.2 条款02:尽量以const,enum,inline替换#define 这个条款或许可以改为“宁可用编译器替换预处理器”。 通常C++要求你对所使用的任何东西提供一个定义式,但如果它是个class专属常量 又是static且为整数类型...

    2021年EFFECTIVEJAVA读书笔记.docx

    Effective Java 读书笔记 - 枚举与注解 本文总结了Effective Java 中关于枚举与注解的知识点,涵盖了枚举类型的优点、使用指南、避免使用 int 常量、使用 EnumSet 和 EnumMap 等。 枚举类型的优点 枚举类型提供了...

    Effective C++ Roy T 读书笔记。

    《Effective C++》是Scott Meyers撰写的一本经典C++编程指南,旨在帮助开发者写出更高效、更可维护的代码。...阅读Roy T的读书笔记可以帮助我们回顾和巩固这些关键概念,更好地将它们应用于实际项目中。

    Effective Objective-C 2.0 学习笔记目录

    Effective Objective-C是本学习Objective-C的好书,没有见pdf版,亚马逊上的这儿本书的价格不菲。让我们来看看书里的内容和完整的学习笔记吧。

    Effective STL笔记

    关于Effective STL的读后感,还有一些此间想得东西和解决的问题

    读书笔记:Effective.Java中文版(第3版).zip

    读书笔记:Effective.Java中文版(第3版)

Global site tag (gtag.js) - Google Analytics