《C++ Primer 5th(中文版)》“概览的概览”之第一部分——C++基础,第二章

C++ Primer已经快读完了,但这本书光读一遍是绝对不行的。至少读两遍,把大部分可操作的习题做一遍,才能记住大部分细节。在这里,我想对C++第一部分——C++基础进行一次非常非常非常简略但结合核心部分的整合,带大家一览C++大略(很浅的那一部分),而不是迷失于细节。

第二章 变量和基本类型

2.1 基本内置类型

1.C++定义了算术类型空类型。常见的类型有bool, char, short, int, long, long long, float, double, long double, unsigned char, unsigned short, unsigned( int), unsigned long, unsigned long long...

2.类型转换。浮点变整型会丢弃小数点,其他类型转换为bool只会是false或者true,true实质上代表1,false实质上代表0。

3.尽量不要使带符号类型和unsigned类型混合使用,否则容易导致溢出问题(负数被转换为unsigned)。

4.unsigned之间的运算必须要保证结果不能是一个负数,否则会发生环绕现象,使结果变成非常诡异的大数。

5.以0开头的整数代表八进制,其后只接受0,1,2,3,4,5,6,7八种符号,否则会出错;以0x(0X)开头的整数代表十六进制,其后还接受8,9,A,B,C,D,E,F和a,b,c,d,e,f。

2.2 变量

6.std::string是一个库类型,其定义在命名空间std中。string的详细内容在第三章和第九章有详细讲解,在这里先不说了。

7.在初学的时候可能认为初始化和赋值没什么不同,毕竟从表面上看,它们都是“给一个变量一个值”。但实则不然,它们之间的差别其实非常大,尤其是在拷贝控制和动态内存分配等情况下,这两种操作的行为可能完全不同。

8.以int为例,初始化有四种方式:int a=0;   int a={0};    int a{0};    int a(0);  它们之间也有差别,在后面这个差别会比较明显。

9.在函数内定义变量但没有指定初值的,变量被默认初始化。此时变量被赋予默认值。默认值到底是什么取决于这个变量的类型,比如对于string,其不接受参数的构造函数(第七章)将其初始化为一个空串(注意,空串不是带一个空格的串,而是什么都没有)。

10.变量命名一般用小写字母,类名一般用大写字母开头,用户定义的标识符不能连续出现两个下划线,也不能以下划线紧连大写字母开头。此外,函数体外的标识符不能以下划线开头。

11.一个名字的有效区域始于名字的声明语句,以声明语句所在的作用域末端为结束。位于全局作用域的变量若为内层同名变量隐藏,可以通过全局作用域“::”来访问:

1 #include <iostream>
2 int a;//外部变量,与int a=0;等价
3 int main()
4 {
5     int a = 1;
6     std::cout << ::a << std::endl;//使用外部变量a,输出0
7     return 0;
8 }

2.3 复合类型

12.复合类型是指基于其他类型定义的类型。在C++中的复合类型中主要的两个就是引用和指针。

  对于引用,关键的一点是其相当于给已有变量起了个别名。这样的话也就相当于一种绑定,而不是重新拷贝一个副本;指针的值是一个变量的地址。

2.4 const限定符

13.const分为顶层和底层。顶层const指针代表这个指针的值(不是这个指针的地址,是这个指针指向的变量的地址)不能被改变,也就是说这个指针不能被赋值,但可以让这个指针指向其他合法的对象;底层指针代表这个指针所指的对象不能被改变(准确说,是不能通过这个指针的途径来改变。如果这个指针指向一个非常量,这个非常量当然可以通过其他途径来改变。可以想象成这个底层const很主观地认为他指向的是一个常量,所以自觉遵守规则,不改变他指向的这个值)。

2.5 处理类型

14.auto类型说明符可以用于推断类型。在C++14之后,auto已经几乎处处可用了,包括但不限于函数的返回类型,模板。注意,auto会丢弃顶层属性和引用属性,如果需要通过auto定义顶层或者引用类型,需要通过const auto、auto&或const auto&。

15.decltype类型提示符可以被想象成全真推断。注意,decltype不会计算其内的值,更不会对其内进行操作。比如declytpe(a=1) b;这一语句并不会把1赋给变量a。如果其内是解引用操作,decltype将得到引用类型。原因也很简单,看下面的代码:

int a=1,*b=&a;

*b=2;

这两行代码的第二行相当于把a的值通过指针间接改为2。大家可以想想,第二行的*b只有是引用类型,才能被绑定到a并真正改变a的值。如果*b的类型是值类型,则充其量是a的副本,对其赋值2并不会改变a本身。

  另外,如果给变量加上了一层或多层括号,decltype也将得到引用类型。

2.6 自定义数据结构

16.关于自定义数据结构,使用关键字structclass的区别仅仅在于两点:默认访问权限(第七章)和继承(第十五章)。

原文地址:https://www.cnblogs.com/starpast/p/8455231.html

时间: 2024-10-16 19:42:50

《C++ Primer 5th(中文版)》“概览的概览”之第一部分——C++基础,第二章的相关文章

C++ primer 第一部分C++基础(1-7章) 不熟悉的知识点 小结

P58 constexpr 和常量表达式 常量表达式 是指值不会改变 并且 在编译过程 就能得到计算结果的表达式; 字面值属于常量表达式; 用常量表示式初始化的const对象 也是常量表达式; constexpr变量 C++11:允许将变量声明为constexpr类型以便 由编译器来验证变量的值是否是一个常量表达式; 一般来说,如果你认定变量是一个常量表达式,那就把它声明成constexpr类型; P214 constexpr函数:是指能用于常量表达式的函数 函数的返回值类型及所有形参的类型都得

C语言学习书籍推荐《C Primer Plus(中文版)(第5版)》下载

普拉塔 (Prata S.) (作者), 云巅工作室 (译者) <C Primer Plus(中文版)(第5版)>共17章,介绍了C语言的基础知识,包括数据类型.格式化输入输出.运算符.表达式.流程控制语句.函数.数组和指针.字符串操作.内存管理.位操作等,知识内容都针对C99标准:另外,<C Primer Plus(中文版)(第5版)>强化了对指针的讨论,并引入了动态内存分配的概念,也讨论了C预处理器和C库函数.高级数据表示(数据结构)方面的内容. 下载地址:点我 编辑推荐 作为

C++Primer 5th 练习 12.19

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

1.命名规范很重要——开局要好,(C++ primer 5th,命名规范下有一句话:若能坚持,必将有效)

1.1.标识符要能体现实际含义 少用缩写 int price_count_reader; // 无缩写 int num_errors; // “num” 本来就很常见 int num_dns_connections; // 人人都知道 “DNS” 是啥 Warning int n; // 莫名其妙. int nerr; // 怪缩写. int n_comp_conns; // 怪缩写. int wgc_connections; // 只有贵团队知道是啥意思. int pc_reader; //

c++ primer 5th学习时间轴[ 100% ]

学习参考: 1.Mooophy/Cpp-Primer. GitHub上star最多的一个答案,英文版,但是编程用到的单词也不多,查查就懂了.但是到第IV部分,很多题目的没有答案,或者不完整. 2.huangmingchuan/Cpp_Primer_Answers. 中文版的答案,和上一个答案差不多. 3.chihyang/CPP_Primer. 学到第IV部分才发现的一个答案,最后一部分内容很全.我猜前面应该也不错.就是star少了点,不容易被搜到. 感觉上面三个仓库都没人维护了,要是能整合就好

Java Persistence with MyBatis 3(中文版) 第二章 引导MyBatis

MyBatis最关键的组成部分是SqlSessionFactory,我们可以从中获取SqlSession,并执行映射的SQL语句.SqlSessionFactory对象可以通过基于XML的配置信息或者Java API 创建. 我们将探索各种MaBatis配置元素,如dataSource,environments,全局参数设置,typeAlias,typeHandlers,SQL映射:接着我们将实例化SqlSessionFactory. 本章将涵盖一下内容: l  使用 XML配置MyBatis

《Netty In Action中文版》第二章:第一个Netty程序

注:本篇内容出自<Netty In Action>一书:         注:本人原创译文,转载请注明出处! 本章介绍 获取Netty4最新版本 设置运行环境来构建和运行netty程序 创建一个基于Netty的服务器和客户端 拦截和处理异常 编写和运行Netty服务器和客户端 本章将简单介绍Netty的核心概念,这个狠心概念就是学习Netty是如何拦截和处理异常,对于刚开始学习netty的读者,利用netty的异常拦截机制来调试程序问题很有帮助.本章还会介绍其他一些核心概念,如服务器和客户端的

C++ Primer 笔记 第二章

C++ Primer 第二章 变量和基本类型 2.1基本内置类型 有算数类型和void类型:算数类型储存空间大小依及其而定. 算数类型表: 类型 含义 最小储存空间 bool 布尔型 - char 字符型 8 wchar_t 宽字符型 16 short 短整型 16 int 整型 16 long 长整型 32 float 单精度浮点型 6位有效数字 double 双精度浮点型 10位有效数字 long double 扩展精度浮点型 10位有效数字 2.1.1整型 包括整数字符和布尔型. 字符型:

c++ primer 5th 练习3.43

#include <iostream> using namespace std; int main() { int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12}; /* for(int (&i)[4]:a) for(int (&j):i) cout<<j<<endl; */ /* for(int i=0;i<3;i++) for(int j=0;j<4;j++) cout<<a[i][j]<<