C++基础

该部分是在我通读一遍C++primer之后,按照章节顺序列出了本书中所写需要注意的地方。

基本内置类型
大多数计算机可寻址的最小内存块为字节(byte),1个byte等于8个bit,也就是8位二进制数,而计算机的位数决定了一个字的大小,32位系统中1个字为4个字节,64位系统中1个字就为8个字节

一个int至少和short一样大,一个long至少和int一样大,一个long long至少和long一样大

选择变量类型的经验准则:

  • 当明确知晓数值不可能为负时,选无符号类型
  • 使用int执行整数运算
  • 在算术表达式中不要使用char和bool,只有在存放字符或bool值时才使用它们
  • 执行浮点数运算使用double

内置类型之间的转化:

  • 当我们把非bool值赋给一个bool时,初始值为0为false,否则为true,反过来同样适用
  • 当我们把浮点数赋给整数类型时,只取整数部分,反过来小数部分记为0
  • 当我们赋给unsigned类型一个超出它表示范围的值时,结果是初始值对unsigned类型表示数值总数取模后的余数,unsigned char c=-1,c为255
  • 当我们给一个带符号类型一个超出它表示范围的数时,结果是未定义的
  • 当一条表达式含混用带符号类型和无符号类型时,带符号类型会被转化成无符号类型(切勿混用)

建议:初始化每一个内置类型的变量

变量声明和定义的关系:C++语言支持分离式编译,一个程序可能包含多个文件,则每个文件被独立编译。变量声明规定了变量的类型和名字,定义则申请空间,可能还会有初始值;如果想声明一个变量而非定义它,则在加上extern关键字,且不要显示初始化变量

变量命名规范:

  • 标识符要能体现实际含义
  • 变量名一般用小写字母
  • 自定义类型一般以大写字母开头
  • 若有多个单词组成,则单词间要有区分

Note:引用不是对象,只是被绑对象的另外一个名字
Note:默认情况下,const对象只在一个文件内有效(除非extern声明)
const的引用:对常量的引用,不能修改引用所绑定的对象

     double dval=3.14;
     const int& ri=dval;
//该赋值语句是合法的,因为编译器执行了下述转换过程:
     const int temp=dval
     const int& ri=temp;

那么考虑下ri不是const常量时为什么是非法的,如果ri只是一个普通的非常量引用,那么编译器会认为肯定是想通过ri来改变dval的值,所以ri不会绑定到一个临时值上

顶层const:该对象本身是个const(对任何数据类型都适用)
底层const:指针所指对象是一个const(与指针或引用等符合类型有关)
Note:指针类型既可以是顶层const也可以是底层const

int i=0
int* const p1=&i   顶层const
const int p2=42    顶层const
const int* p3=&i   底层const
const int *const p3=p2  左边是底层const,右边是顶层const
const int& p=p2  用于声明引用的const都是底层const

对象拷贝时,顶层const可以忽略,底层const却不可以,非常量对象可以拷贝给常量对象,常量对象不能拷贝给非常量对象

常量表达式是指值不会改变,并且在编译阶段就能得到计算结果的表达式
Note:一般来说,只要你认定一个变量是一个常量表达式,那就把它声明为constexpr类型
Note:**如果在constexpr声明中定义了一个指针,限定符constexpr仅对指针有效,与指针所指对象无关.

Note:auto类型说明符一般会忽略掉顶层const,保留底层const

const int ci=42
const int& cr=ci
auto b=ci   b是一个int
auto c=cr   c是一个int(cr是ci的别名,ci是顶层const)
auto e=&ci  e是一个指向整数常量的指针,const int* (底层const)

Note:decltype处理顶层const时保留顶层const(包括引用)

int i=0;
int *p=&i
const int ci=0;
const int& cj=ci;
decltype(ci) a;      a是const int
decltype(cj) b;      b是const int&
decltype(i+5) c;    c是int
decltype(*p) d       d是int&,表达式内容为解引用得到引用类型
decltype((i)) e    e是int&,如果给变量多加一层括号,得到引用

Note:头文件中不应包含using声明,因为头文件可能包含在其它文件,其它文件就在不知情的情况下包含using声明

注意:string对象的每个元素为char类型,字面值可以和string对象相加,但是字面值不能和字面值直接相加

注意:范围for语句中不能改变其遍历序列的大小,vector对象的下标运算可用于访问已存在的元素,但不能用于添加元素

Note:尽量使用标注库类型string,不要使用C风格的字符串(尽管C++支持)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值