zoukankan      html  css  js  c++  java
  • C++Primer 4th edition读书笔记-第二章

    1

    变量的定义用于为变量分配存储空间,还可以为变量指定初始值。在一个程序中,变量有且只有一个定义。
    声明用于向程序表明变量的名字和类型。定义也是声明:当定义变量时,我们声明了它的类型和名字。可以通过使用extern
    关键字声明变量名而不定义它。不定义变量的声明包括对象名,对象类型和对象类型前的关键字extern。
    extern int i; // declears but does not define i
    int i; // declars and defines i
    extern 声明不是定义,也不分配存储空间。事实上,他只是说明变量定义在程序的其他地方。程序中变量可以声明多次,
    定义只能一次。
    只有当声明是定义时,声明才可以有初始化式,因为只有定义才分配存储空间。初始化式必须要有存储空间来进行初始化。
    声明有初始化式那么声明可以当作是定义,即使声明标记为extern:
    extern double pi = 3.1416; // definition
    double pi; // error:redefinition of pi
    同样,随后的含有初始化式的extern声明也是错误的:
    extern double pi = 3.1416; // definition
    extern double pi; // ok:declaration not definition
    extern double pi = 3.1416; // error:redefinition of pi
    声明和定义之间的区别可能看起来微不足道,但事实上却举足轻重的。

    2

    const 对象默认为文件的局部作用域,此变量之存在于这个文件中,不能被其他文件访问,
    非const变量可以在整个程序中访问,非const默认为extern,要使const变量能够在其他文件中访问,必须显示的指定它为extern
    在前面加extern可以使const变量在整个程序中访问
    int counter;
    const int counter;
    extern const int counter;

    3

    引用主要用作函数的形式参数,引用是一种符合类型,符合类型就是指用其他类型定义的类型。
    const引用是指向const对象的引用,const引用可以初始化为不同类型的对象或者初始化为右值,如字面值常量:
    int i = 42;
    const int &r1 = 42;
    const int &r2 = r + 1;
    同样的初始化对于非const引用是不合法的。

    4

    枚举不但定义整数常量集,还把它们聚集成组,每个enum都定义了一种唯一的类型,可以定义和初始化enum类型的对象;
    枚举类型对象的初始化或赋值,只能通过枚举成员或同一枚举类型的其他对象来进行。

    5

    定义变量和定义数据成员存在非常重要的区别:一般不能把类成员初始化作为其定义的一部分&r2 = r + 1;
    同样的初始化对于非const引用是不合法的。

    6

    枚举不但定义整数常量集,还把它们聚集成组,每个enum都定义了一种唯一的类型,可以定义和初始化enum类型的对象;
    枚举类型对象的初始化或赋值,只能通过枚举成员或同一枚举类型的其他对象来进行。

    7

    定义变量和定义数据成员存在非常重要的区别:一般不能把类成员初始化作为其定义的一部分。当定义数据成员时,只能
    指定该数据成员的名字和类型

    8

    头文件一般为相关声明提供一个集中存放的位置,头文件一般包含类的定义,extern变量的声明和函数的声明。
    头文件用于声明而不是定义,当设计头文件时,记住定义和声明的区别是很重要的。因为头文件被包含在多个源文件中
    所以里面不应该有变量和函数的定义,但是这一规则有三个例外,头文件可以定义类,值在编译时就已经知道的const对象和inline函数。

  • 相关阅读:
    日本自然科学研究机构生理学研究所:研究显示古典音乐有助治疗突发性耳聋(转)
    苹果新专利:视频通话不怕掉帧(转)
    三步解决EntityFramework Code First中的MissingMethodException错误
    Unity3D去掉全屏时的屏幕黑边
    WindowsPhone-GameBoy模拟器开发六--[转]指令系统实现必读:补码
    WindowsPhone-GameBoy模拟器开发五--使用XNA初略实现Gameboy显示系统
    WindowsPhone-GameBoy模拟器开发四--Gameboy显示系统分析
    python继承初始化对象实例时 TypeError: module() takes at most 2 arguments (3 given)
    python __getattr__和__getattribute__ 区别
    python – 将列表拆分为较小的列表
  • 原文地址:https://www.cnblogs.com/lit10050528/p/3417261.html
Copyright © 2011-2022 走看看