C++Primer一二章笔记

C++Primer第五版一书中,个人笔记。先更前两章

第 1章 开始

函数定义包括四个部分返回类型,函数名,函数体,形参列表。

IDE 集成开发环境。

cincout 标准输入标准输出。cerr 标准错误输出警告和错误信息。 clog 输出程序运行时的一般消息。<< 输出运算符。>>输入运算符。操纵运算符endl,结束当前行,并将与设备关联的缓冲区中的内容刷到设备中。

初始化:在变量创建的同时为它赋予一个值。

注释界定符/* */ 不能嵌套。复合赋值运算符+= 前缀递增运算符++

istream效果是检测流的状态。输入文件结束符ctrl+z,或者无效输入时,istream对象的状态会变为无效。

编译器不能检查一个程序是否按照作者的意图工作,但可以检查形式上的错误。语法错误类型错误声明错误

来定义自己的数据结构。一个定义了一个类型,以及与其关联的一组操作。

运算符,左侧运算对象必须是一个类类型的对象,右侧运算对象必须是该类型的一个成员名。调用运算符()。

第 2章 变量和基本类型

wchar_t 宽字符,char16_t 、char32_t Unicode 字符、float单精度浮点数、double双精度浮点数、long double 扩展精度浮点数。通常选用double。

可寻址的最小单位称为字节。存储的基本单元称为(指的是32位或64位机器)。

字符类型被分为三种:charsigned charunsigned char。类型char实际上会表现为上述两种形式的一种,具体是由哪种编译器决定。8比特的unsigned char 表示0~255,signed char理论表示-127~127,实际上-128 ~ 127。

当我们对一个带符号类型超出范围则称为未定义

混用带符号数与无符号类型,带符号数会自动地转换成无符号数。

字符串字面值的类型实际上是由常量字符构成的数组编译器会在每个字符串的结尾处添加一个空字符 \0。

指定字面值类型 例如:L’a’ – 宽字符型字面值。p37

对象通常情况下是指一块能存储数据并具有某种类型的内存空间

初始化赋值是两个完全不同的操作。

列表初始化 { }。强制转换使用( )。默认初始化函数体外的变量被初始化为0,在函数体内不被初始化,即未定义的 。这类值被拷贝或访问将引发错误。

声明使名字为程序所知,一个文件如果想使用别处定义的名字必须包含对那个名字的声明。

定义负责创建与名字关联的实体。除声明外,还将申请储存空间也可能会为变量赋一个初始值

extern int i ;//声明i而非定义i
int i ;  //声明并定义j

任何包含显式初始化的声明即成为定义。

:: 作用域操作符左侧为空时,即获取全部作用域。

#include <iostream>
int reused =42;
int main()
{
	int reused = 0;
	std::cout<<::resued;   //全局作用域的resued
}

引用必须被初始化。引用并非对象,它是一个已经存在的对象所起的另外一个名字。

引用类型的初始值必须是一个对象。

指针和引用类似,也实现了对其他对象的间接访问。不同点:指针本身就是要给对象,允许对指针赋值和拷贝。第二,指针无须在定义时赋初值。

错误:把double类型对象的地址赋给int指针。不能把int__变量__直接赋给指针

指针的值即地址。空指针nullptr,过去的程序使用NULL的预处理变量。需#include cstdlib

void* 是一种特殊的指针类型,可用于存放任意对象的地址。不能对void*直接操作,我们也不知道这个对象是什么类型将引发错误。

int* p;     //合法但是容易产生误导。基本类型是int,而非int*

const 限定符。const对象必须初始化

const int i = get_size();    //运行时初始化
const int j = 42;        //编译时初始化,编译器将在编译过程把用到该变量的地方都替换为对应的值

如果多个文件之间想共享const对象,则需要在const前加extern

const int ci = 1024;
const int &r = ci;        //常量引用,类型要一致
double dval;
const int &ri = dval;     //非法

编译器会将代码变为:

const int  temp = dval;
const int &ri = templ;

底层const 指向常量指针:值不能改变,指针值(地址)可以改变

const double pi = 3.14;      
double *ptr = pi;     //错误
const double *pr = ptr;   //正确,指向常量指针
double dval = 3.14;
pr = &dval;       //正确

顶层const 常量指针:指针的值不可以改变

常量表达式constexpr:值不会改变,且在编译过程中就能得到计算结果。

const int sz = get_size();   //sz不是常量表达式,运行时才可以获取值
constexpr int mf = 20;       //常量表达式

一个constexpr指针的初始值必须是nullptr和0。或者是存储于某个固定的对象。函数体之外的可以定义为constexpr

类型别名 typedef。别名声明:

using SI = Sales_item;  //SI是Sales_item的同义词
typedef cahr *pstring ;
const pstring cstr = 0;  //指向的是常量指针,不是指向常量的指针

auto让编译器通过初始值来推断变量的类型。auto定义的变量必须由初始值。

auto sz = 0, pi = 3.14;    //错误:类型不一致

decltype作用是选择并返回操作数的数据类型。包括顶层const和引用在内。引用必须初始化

decltype的表达式如果是加上了括号变量,结果必将是引用。

decltype((i)) d;   //d是引用,必须初始化

struct 需要在大括号外加分号

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值