《C++ primer》--第1,2章小结

 1、变量初始化:

 定义变量时,应该给变量赋初始值,除非确定将变量用于其他意图之前会覆盖这个初值。如果不能保证读取变量之前重置变量,就应该初始化变量。变量的初始化如下:

int val1 = 0; //初始化   
int val2;       //未初始化 

2、编译器的部分功能: 查错

  • 语法错误
  • 类型错误
  • 声明错误    

3、从键盘输入文件结束符

 OS使用不同的值作为文件结束符。Windows系统下通过输入Ctl+z来输入文件结束符,Unix中通常是Ctl+d。

4、整型(integral type):表示整数、字符和布尔值的算术类型。

5、C++中,把负值赋给unsigned对象是合法的,其结果是该负数对该类型的取值个数求模后的值,如果把-1赋给8位的unsigned char 那么结果就是255。

6、字面值常量(literal cinstant)

  1. 整形字面值:可以用3钟进 制来表示,十进制(decimal)、八进制(octal)、十六进制(hexadecimal)。以0开头的是八进制,以0x或0X开头的是十六进制。 还可以在其后加后缀,能强制将字面值常量转化如:L或者l代表常量long,U或者u代表unsigned类型。如:128u /*unsigned*/    8lu/*unsigned long*/
  2. 浮点字面值:通常用十进制或者科学计数法表示,科学技术用E或者e表示。其后加F或者f表示单精度,L或者l表示扩展精度。  如:3.1232F  3.232323E0f
  3. 布尔值和字符字面值:
  4. 非打印字符转移序列

7、变量

1.什么是变量:变量提供了程序可以操作的有名字的存储区。C++中的每一个变量都有特定的类型,该类型决定了变量的内存大小和布局、能够存储与该内存中的值的取值范围以及可运用在该变量上的操作集。

    2.C++关键字

8、变量命名习惯

  • 变量名一般用小写字母。例如通常写成index而不是Index或者INDEX
  • 标识符应使用能帮组记忆的名字
  • 包含多个词的标识符书写为在每个词之间添加一个下划线,或者每个内嵌的词的第一个字母都大写

9、变量的初始化

   有两种初始化方式:复制初始化(copy-initialization)和直接初始化(direct-initialization)。

      int ival(1024); //direct-initialization

      int ival = 1024; //copy-initialization

      初始化不是赋值,初始化指创建变量并给它赋初始值,而赋值是檫除对象的当前值并用新值代替。

10、变量初始化规则

      1.内置类型变量的初始化

        内置类型变量是否自动初始化取决于变量定义的位置。在函数体外定义的变量都初始化成0,在函数体内定义的内置类型变量不进行自动初始化。除了用作赋值操作 符的做操作数,未初始化变量会引起错误难以发现。所以建议每个内置类型的对象都要初始化,虽不是必须但会更加容易和安全。

      2.声明与定义

          变量的定义:用于为变量分配存储空间,还可以为变量指定初始值。在一个程序中,变量有且仅有一个定义、。

          声明:用于向程序表面变量的类型和名字。定义也是声明,当定义变量时我们声明了他的类型和名字。可以通过使用extern关键字声明变量名而不定义他。不定义的声明包括对象名、对象类型和对象类型前的关键字extern“

          extern int i;  //declares but does not define i;

          int i;            //declares and define i

          程序中声明可以多次,但是定义只有一次。只有当声明也是定义时,声明才可以初始化,因为只有定义才分配存储空间。初始化式必须有存储空间来初始化。

11、const限定符

1.魔数:其意义在上下文没有体现出来。

       2.const限定符将一个对象转换成一个常量 const int bufSize = 512;   //bufSize是不可以修改的

          因为常量在定义后就不能被修改,所以定义时必须初始化。

       3.const对象默认为文件的局部变量:在全局作用域定义非const变量时,可以在整个程序中都可以访问。把一个非const变量定义在一个文件中,在另一个文件中使用这个变量。

//file_1.cpp 
int counter; //definition 
//file_2.cpp 
extern int counter;   //uses counter from file_1 
++counter;            //add counter defined in file_1 

        在全局作用域声明的const变量是定义在该对象的文件中的局部变量,此变量只存在那个文件中,其他文件不能访问。通过指定const变量为extern,就可以在整个程序中访问const对象:

//defines and initializes a const that is accessible to other files 
 extern const int counter = 12; //definition 
 //file_2.cpp 
 extern const int counter;   //uses counter from file_1 
 //uses counter defined file_1 
 for(int index=0; index != counter; ++index)  
 {  
 //// 
 }  

非const变量默认认为extern。要使const变量能够在其他的文件中访问,必须显示的指定为extern。

12、引用

    引用(reference)就是对象的另一个名字。在实际程序中,引用主要用作函数的形式参数。引用是一种复合类型,在变量名前添加"&"符号来定义。复合类型指其他类型定义的类型。

int ival = 1024;  
int &refVal = ival; //ok 
int &refVal2; //error: a refernce must be initialized 
int &refVal3 = 10; // error:initializer must be an object 
  • 引用是别名:当引用初始化后,只要该引用存在,他就保持绑定到初始化时指定的对象。不可能将引用绑定到另一个对象。
  • 定义多个引用:可以在一个类型定义行中定义多个引用。必须在每个引用标识符前添加"&"符号。
  • const引用:指向const对象的引用。可以读取但不能修改。非const引用只能绑定到与该引用同类型的对象,const引用可以绑定到不同但相关的类型的对象或者绑定右值。

13、typedef名字:用来定义类型的同义词。有一下三个目的:

  • 为了隐藏特定类型的实现,强调使用类型的目的
  • 简化复杂的类型定义,使其更易理解
  • 允许一种类型用于多种目的,同时使得每次使用该类型的目的明确

14、枚举(enumeration):定义整数常量集,并将他们聚集成组。

   1.定义和初始化:枚举的定义包括关键字enum,其后是一个枚举类型名。默认第一个枚举成员赋值为0,后面的每个比前一个大1.

//input is 0, output is 1, and append is 2 
enum open_modes {input,output,append};  

   2.枚举成员是常量:用来初始化枚举成员的值必须是一个常量表达式,

//shape is 1, sphere is 2, cylinder is 3, polygon is 4 
enum Forms {shape = 1, sphere, cylinder, polygon};  
   Forms中shape赋值为1,其他的是隐式初始化依次为2,3,4
   3.每个enum都定义一种唯一类型

15、头文件:

  • 头文件用于声明而不是用于定义(头文件包含在多个源文件中,所以不应该含有变量或者函数的定义,有三个例外:头文件可以定义类、值在编译时就已知的const对象和inline函数)
  • 一些const对象定义在头文件中

16、预处理器的简单介绍

 1.头文件经常需要其他头文件

   2.避免多重包含:预处理器变量的名字在程序中必须是唯一的。任何与预处理器变量相匹配的名字使用都关联到该预处理器变量。

   预处理器变量有两种状态:已定义和未定义。可以使用下面这段代码来预防多次包含:

#ifndef __CPLUSPLUSPRIMER_H__ 
#define __CPLUSPLUSPRIMER_H__ 
//.... 
#endif  //__CPLUSPLUSPRIMER_H__ 

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏大闲人柴毛毛

稳扎稳打JavaScript(一)——作用域链内存模型

几个概念 在开始之前,先了解几个概念。 1.1. 作用域 作用域是指当前正在执行的代码能够访问到变量的范围; 每个函数都有各自的作用域,存储函数所有的局部变量...

4618
来自专栏闵开慧

php中json_encode

在 ajax 横行的今天,json 顺理成章地成为了前后端交互一个极其重要的工具。对于 PHP 来说,通常使用 json_encode 方法将一个 PHP 组...

3825
来自专栏Golang语言社区

go interface

Go不是一种典型的OO语言,它在语法上不支持类和继承的概念。 没有继承是否就无法拥有多态行为了呢?答案是否定的,Go语言引入了一种新类型—Interface,它...

3315
来自专栏大数据钻研

Java基础语法

java 基 础 语 法 一个Java程序可以认为是一系列对象的集合,而这些对象通过调用彼此的方法来协同工作。下面简要介绍下类、对象、方法和实例变量的概念...

2856
来自专栏idba

Python的map函数

一 简介 Python 内置了很多非常有用的函数 比如map() ,reduce(),filter(),还有lambda。熟练应用这些函数可以在写python...

832
来自专栏coding for love

JS原生引用类型解析7-Promise类型

ES6引入了一个全新的对象Promise,用于表示一个异步操作的最终状态(完成或失败),以及其返回的值。Promise最直接的好处就是链式调用,另外在错误捕获上...

721
来自专栏前端小叙

JS中函数声明与函数表达式的异同

相同点 注:函数声明和函数表达式的相同点包括但不限于以下几点 函数是一个值,所以和其他值一样,函数也可以进行被输出、被赋值、作为参数传给其他函数等相关操作,不...

2865
来自专栏用户2442861的专栏

Java基础之String中equals,声明方式,等大总结

    转载请注明出处:http://blog.csdn.net/dmk877/article/details/49420141 

832
来自专栏web前端-

函数基础知识回顾

  String    Number   Boolean   Null    undefined    //占有固定的内存大小,如数值型占八个字节,布尔类型...

753
来自专栏web前端教室

javascript 红皮高程(20)-- 逻辑或

或,逻辑或邮二个竖线(||)表示,它需要二个操作数。 它的逻辑很好理解: 操作数1 操作数2 结果 true true tr...

1878

扫码关注云+社区

领取腾讯云代金券