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函数。
C++Primer 4th edition读书笔记-第二章的更多相关文章
- 《C++ Primer》读书笔记—第二章 变量和基本类型
声明: 文中内容收集整理自<C++ Primer 中文版 (第5版)>,版权归原书所有. 学习一门程序设计语言最好的方法就是练习编程. 1.8比特的char类型计算机表示的实际范围是-12 ...
- 《C++ Primer 4th》读书笔记 序
注:本系列读书笔记是博主写作于两三年前的,所以是基于<C++ Primer>第四版的,目前该书已更新至第五版,第五版是基于C++11标准的,貌似更新挺多的.博主今年应届硕士毕业,如若过阵子 ...
- STL源码分析读书笔记--第二章--空间配置器(allocator)
声明:侯捷先生的STL源码剖析第二章个人感觉讲得蛮乱的,而且跟第三章有关,建议看完第三章再看第二章,网上有人上传了一篇读书笔记,觉得这个读书笔记的内容和编排还不错,我的这篇总结基本就延续了该读书笔记的 ...
- Getting Started With Hazelcast 读书笔记(第二章、第三章)
第二章 起步 本章就相当简单粗暴了,用一个个例子说明hazelcast怎么用. 1.map,set,list这些集合类都是开箱即用的,只要从Hazelcast的实例中获取一份就行. 2.增加了Mult ...
- Java Concurrency in Practice 读书笔记 第二章
第二章的思维导图(代码迟点补上):
- Spring 3.x 实践 第一个例子(Spring 3.x 企业应用开发实战读书笔记第二章)
前言:工作之后一直在搞android,现在需要更多和后台的人员交涉,技术栈不一样,难免鸡同鸭讲,所以稍稍学习下. 这个例子取自于<Spring 3.x 企业应用开发实战>一书中的第二章,I ...
- javascript 数据结构和算法读书笔记 > 第二章 数组
这章主要讲解了数组的工作原理和其适用场景. 定义: 一个存储元素的线性集合,元素可以通过索引来任意存取,索引通常是数字,用来计算元素之间存储位置的偏移量. javascript数组的特殊之处: jav ...
- [Effective Java 读书笔记] 第二章 创建和销毁对象 第一条
第二章 创建和销毁对象 第一条 使用静态工厂方法替代构造器,原因: 静态工厂方法可以有不同的名字,也就是说,构造器只能通过参数的不同来区分不同的目的,静态工厂在名字上就能表达不同的目的 静态工厂方法 ...
- C primer plus 读书笔记第二章
这章的标题是C语言概述,内容大概是介绍一些简单的示例程序,来了解和熟悉C语言的一些基本特征. 这是书里的第一段代码,敲敲找找感觉.推荐在linux环境下写代码. PS:倒腾sublime text一下 ...
随机推荐
- linux软硬链接
ln分为软链接和硬链接 1.软连接 -s ln -s /mnt/hgfs/SHARE hvshare2 相当于在当前目录下新建一个名为hvshare2的快捷方式指向/mnt/hgfs/SHARE路 ...
- Oracle-client支持exp|imp|rman
官方精简版的驱动,不支持持exp/imp/rman,故需要安装oracle_client客户端. 实验环境: Centos6.5 x64 Oracle 11.2.0.4.0 Oracle_clie ...
- 解决windows下MySQL表名大写自动变小写的问题
解决windows下MySQL表名大写自动变小写的问题 有些人可能会遇到在windows下,表名不能用大写字母, 即使使用了大写字母的建表语句,还是会被自动转成小写. 解决方法: 打开 My ...
- js insertBefore
<select id="city" size="4" style="width:50px"> <option id=&qu ...
- 《JAVA与模式》之有感
陆陆续续看了gof,大话设计模式等books,对于设计模式仍然是徘徊于门外,随偶有感悟,然久必忘记,是实则悟性太低. 因此作此文,结合博客中一系列关于设计模式的博文,加深对设计模式的理解,同时备自己随 ...
- Win32:引用头文件
1.首先,在代码文件头部使用#include来包含任何头文件(扩展名为.h或者.hpp的文件)都不会“产生”额外的函数. 我们可以说,包含一个头文件之后,该头文件内部已经定义的一些变量,宏,函数等等资 ...
- Form_Form Builder的常用方法(概念)
2014-07-07 Created By BaoXinjian
- DBA_实践指南系列5_Oracle Erp R12日常运维和管理(案例)
2013-12-05 Created By BaoXinjian
- GO1.6语言学习笔记3-工具篇(SublimeText 3+GoSublime组合)
选择SublimeText作为开发工具的原因,最最主要的是它够轻巧,搭配GO开发才能有飞一般的感觉.当然作为开发工具之一,Sublime组合工具也提供足够强大的功能. 自动化提示代码 保存的时候自动格 ...
- mysql 行转列(存储过程)
直接sql(自己抽离代码,无法和order by rand() 复用): select shit from( select 要累加的字段, @tt:=CONCAT(@tt,',',a.要累加的字段) ...