C++Primer笔记

数据类型

类型转换

  • 当赋给无符号类型一个超出它表示范围的值时,结果是初始值对无符号类型所能表示数值的总数取模之后的余数,例如:8bit的unsigned char可以表示0至255这256个数,那么当我们给一个unsigned char类型的变量赋值-1时,结果就是-1对256取模,也就是255;
    又例如: 32bit的unsigned可以表示2^32 = 4,294,967,296个数值,那么当执行如下语句时首先i转换为unsigned类型,
    -42 + 4,294,967,296 = 4,294,967,254;然后与u相加,结果为4,294,967,264
unsigned u = 10;
int i = -42;
std::cout << u + i << std::endl;
  • 当赋给有符号数类型一个超出它表示范围的值时,结果是未定义的

字面值常量的各种写法

整型

  1. 八进制,数字0后面再加上数值,如024表示八进制的20;
  2. 十六进制,0x后面加上数值,如0x10表示十六进制的16;

变量的默认初始化

  • 如果是内置类型的变量未被显式初始化,它的值由定义的位置决定。定义于任何函数体之外的变量被初始化为0;定义于函数体内部的则不被初始化,它的值是未定义的。
  • 如果是类的对象没有被显式初始化,则其值由类确定。

变量的声明和定义

声明

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

定义

定义(definition)负责创建与名字关联的实体。

extern int i; //声明i而非定义i
int j;        //声明并定义j
extern int n = 1//包含显式初始化的声明即成为定义,此处extern的作用被抵消了
  • 在函数体内部,如果试图初始化一个由extern关键字标记的变量,将引发错误。
  • 变量只能被定义一次,但可以多次声明。
  • 如果要在多个文件中使用同一个变量,就必须将声明和定义分离。此时变量的定义必须出现在一个文件中,而其他用到该变量的文件必须对其进行声明。

引用和指针

引用

引用类型为对象起了另外一个名字。

  • 引用必须初始化
  • 引用只能和初始对象绑定,不能重新绑定到另外一个对象
  • 引用不是对象,它只是一个已经存在的对象的别名

指针

指针存放某个对象的地址

  • 因为引用不是对象,所以不能定义指向引用的指针

void* 指针

  • void*指针可以存放任意对象的地址。
  • void指针的用途很有限:和别的指针比较、作为函数的输入输出,赋值给另一个void指针
  • void*指针不能直接操作其指向的对象,因为不知道这个对象是什么类型

const限定符

可以理解为只读变量

  • cosnt对象一旦创建,其值就不能再改变
  • 默认情况下,const对象仅在文件内有效,当cosnt变量的初始值是常量表达式且多个文件出现了同名的cosnt变量时,相当于在不同文件中分别定义了独立的变量。
  • 但是,当const变量的初始值不是常量表达式,且在多个文件中要用到同一个const对象时,可以添加extern关键字,不论定义还是声明都添加extern,这样就可以在多个文件中使用同一个const对象

const的引用

对const变量的引用,不能用作修改它绑定的对象的值,在定义这样的引用时,要加const关键字

const int val = 100;
const int &ref = val;//正确
int &ref = val;//错误
posted @   wutao666  阅读(34)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
点击右上角即可分享
微信分享提示