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

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

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

条款01:把C++当作一个语言联邦

    c++不是简单的“添加了面向对象特性的c语言”。我们可以认为c++是由以下四个次语言组成的语言。

 

1,C语言: 说到底,c艹仍然是已c为基础的,区块,语句,预处理器,内置数据类型,统统来源于c语言。

2,面向对象c++:这一部分包含了 封装,继承,多态,等等面向对象编程语言最直观的特征。

3,Template c++:泛型编程。

4,STL:是一个template程序库。包含有容器,迭代器,算法,以及程序对象。

 

    每个语言都有自己的规约。记住这4个语言你会发现c艹容易理解得多。

 

条款02:尽量以 const,enum,inline 替换 #define

 

编译过程:.c文件--预处理-->.i文件--编译-->.o文件--链接-->bin文件

 

    预处理过程扫描源代码,对其进行初步的转换,产生新的源代码提供给编译器。检查包含预处理指令的语句和宏定义,并对源代码进行相应的转换。预处理过程还会删除程序中的注释和多余的空白字符。可见预处理过程先于编译器对源代码进行处理。预处理指令是以#号开头的代码行。

 

    当我们写出如下代码:

#define ASPECT_RATIO 1.653

     可能记号ASPECT_RATIO并没有被编译器看见;也许在预处理阶段她就被预处理器移走了。当由于这个记号发生了error的时候,编译器的提示可能是1.653,而不是ASPECT_RATIO。这会让人摸不到头脑、

    解决之道是使用常量来替换上面的宏定义

const double ASPECT_RATIO = 1.653;

    作为一个语言常量ASPECT_RATIO肯定会被编译器看到。因为预处理器是将目标进行盲目的替换,可能导致目标代码出现多份1.653,若改用常量定义则不会出现这样的情况。

    使用常量有两点需要注意:

1,定义常量指针。由于常量指针经常放在头文件内,所以有必要将指针声明为const。

const char *authorName = “Shenzi”;

 在c++中定义字符串最好使用string

 cosnt std::string authorName("Shenzi");

 2,class专属常量。为了限定这个常量的作用域在class内,必须要让她成为一个class成员。为了确认常量只有一份实体,所以必须将其设定为static成员。

#include<iostream>
using namespace std;
class GP{
    public:static const int NTm = 5; //声明
    int soc[NTm];
};
const int GP::NTm; //定义 如果没有这句,接下来取地址会出错
int main(){
    int const *pi = &GP::NTm;
    return 0;
}

 当然,由于部分编译器不支持类内的声明式上获得初值,可以将初值放在定义式。

#include<iostream>
using namespace std;
class GP{
    public:
    static const int NTm;
//    int soc[NTm]; //此时无法在类内使用NTm
//为了在类内使用NTm可以用 enum{NTm = 5}; 替换静态变量
};
const int GP::NTm = 5;
int main(){
    int const *pi = &GP::NTm;
    return 0;
}

    另一种常见的#define误用情况是,其实现的宏看起来很像函数,但是并没有导致函数调用。

    比如下面的代码

#define fun(a,b) a*b;

    我们进行如下运算

2.0/fun(1.0,2.0);

    我们期望的算法是 2.0 / (1.0 * 2.0)

    但是编译器会把代码解释为 2.0 / 1.0 * 2.0

 

针对这种问题的解决方案是定义inline的模版函数

template<class T>
inline T fun(const T& a,const T& b){
    return a*b;
}

 

4
3
分享到:
评论

相关推荐

    精版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 C++ 读书笔记 PPT

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

    Effective-Java读书笔记(上)

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

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

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

    Effective_C++_笔记

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

    effective c++笔记1

    Effective C++笔记1 本笔记总结了Effective C++的第1到第11条款,涵盖了C++语言的多个方面,包括构造函数、拷贝构造函数、拷贝赋值函数、const关键字、enum、inline函数、定义域、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 C++笔记1

    Effective C++笔记1 本笔记概括了 Effective C++ 中的四十个规则的第一个部分,涵盖了 C++ 语言的基本概念、const 的使用、inline 函数的应用、对象的初始化等方面。 规则 1:将 C++ 视为语言联合体 -------------...

    读书笔记:Effective Java中文版第二版示例、笔记.zip

    读书笔记:Effective Java中文版第二版示例、笔记

Global site tag (gtag.js) - Google Analytics