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〗使用gsoap搭建web server(C++)
1. gsoap的好处就不用说了:百度百科 2. gsoap的下载地址:项目地址,目前我使用的是2.8.15版本 3. 开发环境:Ubuntu13.10 4. 具体操作步骤(以简单相加为例): 1)编 ...
- 【shell】正则表达式
当一个文件或命令输出中抽取或过滤文本时,可以使用正则表达式(RE),正则表达式是一些特殊或很不特殊的字符串模式的集合. 在Linux中grep.awk.sed均可解释正则 1.基本元字符集及其定义 ^ ...
- Python之str方法
# -*- coding: utf-8 -*- #python 27 #xiaodeng #Python之str方法 #http://python.jobbole.com/82655/ #str为一个 ...
- vsftp限制FTP用户只能访问自己的目录
修改配置文件/etc/vsftpd/vsftpd.conf chroot_local_user=YESallow_writeable_chroot=YESchroot_list_enable=YESc ...
- Linux生成高强度密码
在撰写,自动化脚本.往往需要添加账户及密码.如何自动化填写随机密码,有点意思.... 01.openssl生成密码 [root@mvp ~]# openssl rand -base 14Usage: ...
- Web Service基础——基础概念
1. Web Service基本概念 Web Service(Web服务)是一种远程调用技术,他的作用就是从远程系统中获取业务数据.具体来说,Web Service可以让你的网站使用其他网站的资源,比 ...
- Nginx中的安全配置
1.测试环境 操作系统:CentOS6.5 Web服务器:Nginx1.4.6 Php版本:Php5.4.26 2.Nginx介绍 1.nginx本身不能处理PHP,它只是个web服务器,当接收到请求 ...
- inet_ntoa 的一个小问题
一个简单点的阻塞式tcp服务器如下所示: #include <stdio.h> #include <string.h> #include <sys/socket.h> ...
- Python 各种库的安装
在Win7 系统安装的Python 各种库,如:pandas.numpy.scipy等 因为平时使用的是IDE-PyCharm,这里可以直接 [File-Setting-Project:XXX-“+” ...
- App上架重磅通知:App Store安全新规17年1月生效
作者:沙铭 来源:公众号 沙铭世界观 ID:mobview 做推广的也许并不了解什么是ATS(App Transport Security),不过这却是一个定时炸弹,引爆点在2016年底,后果就是你不 ...