C++ Primer 知识总结(一)

《C++Primer e5》第二章。

1. 默认初始化,值初始化

值初始化:在类型名后跟一对空括号。

string *ps1 = new string;   //默认初始化为空string

string *ps2 = new string();  //值初始化为空string

int *pi1 = new int;  //默认初始化;*pi1的值未定义

int *pi2 = new int(); //值初始化为0;*pi2为0

对于内置类型来说:默认初始化的对象的值是为定义的;值初始化的对象有着良好定义的值。

对于定义了自己的构造函数的类类型来说,默认初始化和值初始化都会通过默认构造函数来初始化。

p408

2. 分离式编译机制,变量的声明与定义

为什么需要分离式编译机制?为了将程序拆分成多个逻辑部分来编写,每个部分放在不同的文件中,各个文件可以被独立编译。这样的话就需要在多个文件之间共享代码。于是C++语言将声明与定义分开。

头文件只能包含那些只能被定义一次的实体。

参考p41,p67,p186

3. C++是一种静态类型的语言,如何理解?

C++是一种静态类型的语言,其含义是在编译阶段检查类型。

参考p42

4. 一条声明语句由一个基本数据类型和紧随其后的一个声明符列表组成。

基本数据类型可以是单纯的一个类型,也可以是“typedef 类型”,“const 类型”。

声明符可以是简单的一个变量名,还可以是“*变量名”,“&变量名”,“*&变量名”,“**变量名”等复合类型。

因此 对于声明语句 char  *p;最好将*和p写在一起,表示一个声明符;而不要写成 char*  p;

p45

5. 默认情况下,const对象仅在文件内有效。如果想在多个文件之间共享const对象,则在变量的定义之前添加extern关键字。

p54

6. 顶层const,底层const

顶层const表示变量本身是const;底层const表示变量(主要是指针和引用)所指向的对象是const。

注意:用于声明引用的const都是底层const。因为引用本身不是对象。

p57

7. constexpr变量

因为const修饰的变量可能在编译时还不能确定该变量的值。比如 const size = get_size();

但由constexpr修饰的变量就可以由编译器来验证该变量的值是否是一个常量表达式。

constexpr修饰指针时只表示指针变量本身是常量,不代表所指向的对象是常量。

p59

8. 当类型别名遇到const或者复合类型后...,如何理解?

typedef char *pstring;

const pstring cstr = 0; //cstr本身是一个const对象,cstr又是一个指针,所以cstr是一个指向char的常量指针。注意:不能这样替换 const char *cstr = 0;

const pstring *ps; //ps是一个指针,ps本身不是const,ps所指向的对象是const,所以ps是一个指针,ps指向的对象是一个指向char的常量指针。

技巧:不要做对类型别名做替换,而是将类型别名看作普通的自定义类型去理解,比如Person类。

p61

9. 类型说明符auto

通过变量的初始值来推断变量的类型。

10. 类型说明符decltype

从变量或者表达式推断得到类型。

时间: 2024-10-12 12:48:09

C++ Primer 知识总结(一)的相关文章

c++ 核心知识-基于c++ primer第5版

如果一味的记录语法,为什么要我来说呢?而且学习编程语言重要的学会知识的核心,背后的逻辑和思想.记住一点,背后的逻辑和思想是为了解决问题而产生的. c++ primer第5版的第一章,后续我只会写第几章,不会再指明是依据c++primer第5版了. 第一章实际上是一些初步的介绍,初步的介绍了初学者的一些操作,基本的输入输出,函数,以及C++的核心类的初步介绍. 背后的核心和可以自我提问和回答的东西我觉得有这些. main函数,为什么一定要有main函数,很多人会告诉你一定要有main函数,为什么?

C++ primer plus读书笔记——第1章 预备知识

第1章 预备知识 1. Ritchie希望有一种语言能将低级语言的效率.硬件访问能力和高级语言的通用性.可移植性融合在一起,于是他在旧语言的基础上开发了C语言. 2. 在C++获得一定程度的成功后,Stroustrup才添加了模版,这使得进行泛型编程成为可能. 3. Linux中要支持C++11,编译源文件时要使用-std = c++0x选项: g++ -std = c++0x use_auto.cpp 4. 程序执行完毕后,有些IDE自动关闭窗口,而有些IDE不关闭.为查看输出,可以在程序的最

《C++ Primer Plus》学习笔记 第1章 预备知识

第一章 预备知识C++在C语言的基础上添加了对"面向对象编程"的支持和对"泛型编程"的支持.类 —— 面向对象模板 —— 泛型编程1.1 C++简介1.2 C++简史1.3 可移植性和标准1.4 程序创建的技巧http://www.cnblogs.com/moonlightpoet/p/5611668.html1.5 总结

《C++ Primer(第五版)》知识巩固

运行平台:ubuntu 12.04/GCC 4.8.0 第二章:基本内置类型 1.decltype类型指示符 当我们从表达式的类型来推断要定义的类型时,可以使用decltype()来解析:decltype与auto不同,decltype应用于变量,返回该变量的类型. string s("Hello World!!!"); // punct_cnt has the same type that s.size returns decltype(s.size()) punct_cnt = 0

C++ Primer Plus(一)——预备知识

?1.1  C++简介? C++=C语言+面向对象+泛型,C++的编程方式=过程性语言+面向对象语言+泛型编程 1.2  C++简史 1. 过程性语言首先确定计算及应采取的操作,然后使用编程语言来实现这些操作. 2. 结构化编程将分支限定为一组行为良好的结构(for循环.while循环.do while循环和if else语句) 3. C语言具有结构化编程和自顶向下的设计原则. 4. 面向对象编程的理念是设计与问题的本质相对应的数据格式.在C++中,类是一种规范,描述了这种新型数据格式,对象是根

C++ Primer快速学习 第一章 入门

很多人说C++Primer不适合于入门,本系列入门文章向大家证明了:这是一个谎言. 第一章 入门 本章介绍 C++ 的大部分基本要素:内置类型.库类型.类类型.变量.表 达式.语句和函数. 1.1. 编写简单的 C++ 程序 每个 C++ 程序都包含一个或多个 函数 ,而且必须有一个命名为 main.函数 由执行函数功能的语句序列组成.操作系统通过调用 main 函数来执行程序, main 函数则执行组成自己的语句并返回一个值给操作系统. 下面是一个简单的 main 函数,它不执行任何功能,只是

C++ Primer笔记8_动态内存_智能指针

1.动态内存 C++中,动态内存管理是通过一对运算符完成的:new和delete.C语言中通过malloc与free函数来实现先动态内存的分配与释放.C++中new与delete的实现其实会调用malloc与free. new分配: 分配变量空间: int *a = new int; // 不初始化 int *b = new int(10); //初始化为10 string *str = new string(10, ); 分配数组空间: int *arr = new int[10];//分配的

C++Primer 5th 练习 12.19

这阵子真是太忙了, 连续做了四个课设. 当然这并不能作为好久没写博客的借口, 没写博客的主要原因只有一个: 懒. 最近又开始回顾C++的语法与特性(据说C++就是一门需要反复回顾的语言),以及学习C++的编程规范. 敲了C++Primer 5th 上的一道典型的练习题,纪念一下这即将过去的2016. 题目描述: 定义你自己版本的 StrBlobPtr, 更新 StrBlob类, 加入恰当的 friend 声明及begin 和 end 成员. 这道题目主要是练习 智能指针 share_ptr 和

C++ Primer Plus的若干收获--(十)

明天就要回学校了,本来回家之前是有一片宏图伟志的,无奈只能抱着这可怜的十篇博客回学校了.自己马上就要大三,大学的下一半马上就要开始了,我的未来还有什么在等待着我呢,好期待!!! 10.1 友元 我们知道C++控制对类对象私有部分的访问.通常,公有类方法是唯一的途径,但是除此之外C++还提供了另外一种机制:友元.友元有三种友元函数,友元类与友元成员函数.在介绍如何成为友元前,先介绍一下为何需要友元.在为类重载二元运算符是常常需要友元.将之前的Time对象乘以实数就是这种情况. 我们之前重载了+ T