C++Primer笔记(1)
1.初始化
在C++中,初始化与赋值操作是完全不同的两个操作。初始化不是赋值,初始化的含义是创建变量时赋予其一个初始值,而赋值的含义是把对象的当前值擦除,而以一个新值来代替。
初始化的方式有:
int test = ;
int test = {};
int test{};
int test();
第3行这种使用花括号初始化的方式被称为列表初始化(C++11新标准)。而从第2行中可以看出,赋值操作也可以采用一组由花括号括起来的初始值来完成。而采用这种初始化的方式的好处在于,在出现初始化操作存在丢失信息的风险时,编译器会进行警告,而另外两个却不会。当然,这必须是在初始化内置类型变量的情况下。
而所谓的丢失信息,譬如将一个占8字节类型的变量赋值给一个占4字节类型的变量时就会存在此类风险。
如果定义变量时没有指定初始值,则变量被默认初始化。堆中的内置变量被初始化为0,栈中的内置变量不被初始化、即其值未定义。类的对象未初始化,则其值由类确定。
类的值其实等同于类内各个成员的值,则上句话的意思就是,如果类的对象没有被初始化,则让编译器去类的定义中看看有没有提供类内初始值(C++新标准),有就照办,没有就别管。
2.引用
引用实质就是为对象起了一个别名而已。引用必须初始化!
int test1 = ;
int &test2 = test1;
此时对test2操作就等同于对test1操作。引用只能绑定在对象上,而不能与字面值或某个表达式的计算结果绑定在一起。而且,引用的类型必须与其所引用的对象的类型一致,但是有两种例外:
第一种情况是在初始化常量引用时允许将结果能转换成引用类型的任意表达式作为初始值。
第二种情况是派生类引用向基类引用的自动类型转换。
3.const限定符
默认情况下,const对象仅在文件中有效。而想要实现只在一个文件中定义const对象,在其他多个文件中声明使用它,则需要该对象声明与定义都添加extern关键字。顶层const、底层const不过就是指针常量和常量指针。
4.constexpr和常量表达式
常量表达式是指值不会改变并且在编译过程就能得到计算结果的表达式。
将你认为是常量表达式的变量声明为constexpr类型(C++11新标准),以便由编译器检查变量的值是否是常量表达式。声明的constexpr变量一定是一个常量,而且必须使用常量表达式初始化。值得注意的是: 定义一个constexpr类型的指针,限定符constexpr只对指针有效,与指针所指对象无关!
const int *p = nullptr; //p是一个指向整型常量的指针
constexpr int *q = nullptr; //q是一个指向整型的常量指针
5.类型别名
typedef与C语言一致。
C++有一种新的方法,别名声明。使用关键字using。
using pstring = char *;
其他特性与typedef一致。
值得注意的是类型别名不能像宏定义一样去直接替换理解,而应该将新生成的别名当做是一个新类型去理解。
using pstring = char *;
const pstring ps1 = nullptr; //指向char的常量指针
const char *ps2 = nullptr; //指向const char的指针
显而易见,2、3行表达意义不同。
6.auto类型说明符
auto类型说明符(C++11新标准)能让编译器通过初始值来推算出变量的类型。显然,auto类型的变量必须有初始值。
int test = ;
auto index = test; //index为int类型变量
要注意的是当使用auto在一条语句中声明多个变量时,所有变量的初始基本数据类型必须一致,因为一条语句中只能有一个基本数据类型。
7.decltype类型指示符
decltype类型指示符(C++11新标准)可以返回操作数的类型(包括引用及顶层const)。
const int test1 = ;
const int& test2 = test1;
decltype(test1) x = ; //x类型为const int
decltype(test2) x = test1; //x类型为const int&
要注意的有两点:
第一点,如果表达式内容是解引用操作,则decltype将得到引用类型。
第二点,如果给操作变量加上一层或多层括号,则decltypr将得到引用类型。
8.编写自己的头文件
类通常被定义在头文件中,所在头文件名字与类名一致。
为了防止头文件被重复包含,采用预处理功能头文件保护符来进行规避。
man.h
#ifndef MAN_H
#define MAN_H
#include <string>
class man {
std::string name;
unsigned int age;
};
#endif
C++Primer笔记(1)的更多相关文章
- C++ Primer笔记
		C++ Primer笔记 ch2 变量和基本类型 声明 extern int i; extern int i = 3.14;//定义 左值引用(绑定零一变量初始值,别名) 不能定义引用的引用:引用必须 ... 
- C++ Primer 笔记(1)基础中的战斗机 输入输出 对输入不定数据处理
		今天打算再重新好好的看一遍C++ Primer这本很经典的书籍,笔记开始: 1.每个C++程序都包含一个或者多个函数,其中必须有一个main,操作系统通过调用main入手运行程序: 2.函数包括:返回 ... 
- C++ Primer 笔记 第一章
		C++ Primer 学习笔记 第一章 快速入门 1.1 main函数 系统通过调用main函数来执行程序,并通过main函数的返回值确定程序是否成功执行完毕.通常返回0值表明程序成功执行完毕: ma ... 
- C++primer笔记之顺序容器
		最近又重新拾起C++primer,发现每一次看都会有不同的体验,但每一次看后因为不常用,忘记得很快,所以记笔记是很关键的一环,咋一看是浪费时间,实际上是节省了很多时间.下面就把这一节的内容做一个简单的 ... 
- c++ primer 笔记  (一)
		昨天开始看的<C++ Primer>,确实不错.希望这周抓紧看完,每天做下笔记,以便以后复习. main函数返回一个值给操作系统 操作系统通过main函数返回的值来确定程序是否成功执行 ... 
- C++ Primer笔记(1)——连续读取数据、类型对应的尺寸、类型转换、字符串分行写法
		这次要看看C++ Primer,这本基本上就是必读书籍了.下面的内容就是一些之前没有学过的知识的笔记. 读取数量不定的输入数据 虽然很简单,但是还是记一下: #include <iostream ... 
- C++Primer笔记(3)
		标准库类型string表示可变长的字符序列,使用前先包含string头文件.(哈哈,终于可以逃脱C语言中的str函数系列了.)因为是标准库的一部分,所以string被定义在命名空间std中.所以你懂该 ... 
- C++ Primer 笔记 第三章
		C++ Primer 第三章 标准库类型 3.1using声明 例: using namespace atd; using std::cin; 3.2string类型 初始化方式 string s1 ... 
- C++ Primer 笔记 第二章
		C++ Primer 第二章 变量和基本类型 2.1基本内置类型 有算数类型和void类型:算数类型储存空间大小依及其而定. 算数类型表: 类型 含义 最小储存空间 bool 布尔型 - char 字 ... 
- C++ Primer 笔记——数组
		1.数组的大小是固定不变的,声明时必须指定大小(或者使用列表初始化),而且大小必须大于0,C++ Primer里面也建议,如果不确定元素的个数,请使用vector. ]; , , }; //数组长度固 ... 
随机推荐
- Stack Overflow 上排名前十的与API相关的问题
			Stack Overflow是一个庞大的编程知识仓库,在Stack Overflow 上,数百万的提问被回答,并且这些回答都是高质量的.这就是为什么在Google搜索结果的排行榜上,Stack Ove ... 
- (原)ubuntu16重装显卡驱动后,torch中的问题
			转载请注明出处: http://www.cnblogs.com/darkknightzh/p/6030232.html 参考网址: https://github.com/torch/cutorch/i ... 
- mysql update语句,修改字段,,或者是批量修改字段
			更新一个字段,在它的后面加一个字符串,不查询数据库得到这个字段值 怎么添加?? 例如: 我的test表,有个user字段,我现在想在它后面加了另一个用户的名字 我在mysql数据库这样写 UPDATE ... 
- [linux] linux知识积累(不断更新中…)
			一.vim知识 f(find)命令也可以用于移动,fx将找到光标后第一个为x的字符,3fd将找到第三个为d的字符. D 删除当前字符至行尾.D=d$ :split或new 打开一个新窗口,光标停在顶层 ... 
- final关键字的作用
			final 可以修饰类.方法.变量. (1):final修饰的变量是一个常量,只能被赋值一次. 常量一般使用final声明,如: public static final String CHINA = ... 
- 关appid
			https://code.google.com/p/goagent/wiki/InstallGuide 申请appid 
- PHP CI框架下,如果配置NGINX(根目录和子目录两种模式)
			摸索了一会儿,先配置成功,再看看PATH_INFO之类的东东吧. A,根目录: location ~ \.php($|/) { root html; fastcgi_pass ; fastcgi_in ... 
- 无人参与安装IIS 6.0
			使用脚本安装 IIS 从“开始”菜单,单击“运行”. 在“打开”框中,键入 cmd,然后单击“确定”. 在命令提示符下,键入 Sysocmgr.exe /i:sysoc.inf /u:%path_to ... 
- Berserk Rook
			Berserk Rook As you may know, chess is an ancient game for which almost everyone has at least a basi ... 
- (DP)House Robber
			题目: You are a professional robber planning to rob houses along a street. Each house has a certain am ... 
