C++Primer(二)

C++Primer(二)

C++是一种静态数据类型语言,它的类型检查发生在编译时。因此编译器必须知道程序中每一个·变量对应的数据类型。而python,smalltalk在运行时检查数据类型。


一、基本内置类型

空类型(void)和算数类型 算数类型又分为整型(包括字符布尔)和浮点型 C++语言规定int至少和short一样大 long至少和int一样大 long long以此类推。

存储单位

1.计算机以bit序列存储数据。 2.可寻址的最小内存块叫字节。 3.存储的基本单元称为字(word)。 4.32位系统为4字 64位系统为8字。 通常float为1字,double为2字, 执行浮点运算时通常用double。

类型转换

int和unsigned相遇 int转为unsigned 。当无符号超出所表示范围时,结果为初始值对无符号类型所能表示的数的个数取模。 当赋给带符号超出范围的值时,结果是未定义的。

二、字面值常量

整形和浮点型字面值

十进制字面值的类型为int,long,long long中尺寸最小的那个(int)。 八进制和十六进制字面值的类型为能容纳其值的(int, unsigned int, long ,unsigned long, long long, unsigned long long)尺寸最小的那个。如果字面值连最大的数据类型都放不下就会产生错误,类型short没有对应的字面值

字符串和转移序列

字符串字面值实际是const char* 类型 "A" 包含了A和空字符
std::cout << "I love everything expect you,"
			" but I want you!" << std::endl
这是字符串的分行书写

转义序列

\115 和 \x4d 都表示字符M,这里使用了泛化的转义序列。形式为\x跟1或多个16进制数字,或者\后跟一或多个8进制数字。如果8进制后面跟的数超过3个就只会转义前三个。另外如果是16位多位数,如果其范围超过char所能包含范围,也会报错。通常超过8位的16进制字符都以某个前缀开头的扩展字符集一起使用

代码如下(示例):

L'a'	//宽字符型字面值 wchar_t
u8"hi,tole"	//仅用于字符串字面常量(UTF-8)
//前缀U、u分别代表Unicode16和32字符 char16_t char32_t
//后缀u或U都代表unsigned f-float l-long double(针对浮点型字面量,如果是整形字面量则代表long)
42ULL //无符号整形字面量 类型位unsigned long long
对于一个整形字面值,如果其后缀带有U,就会选择匹配的最小unsigned类型。如果后缀为L,则至少为long,如果为LL则在long long 或 unsigned long long中一种。混合使用也遵从上规则。

布尔字面值和指针字面值

布尔字面值为true和false nullptr为指针字面值

三、 变量

列表初始化的形式
int a{0};	//这就是列表初始化
long double ld = 3.1415926;
int c{ld};	//因为会丢失数据所以编译器拒绝了c初始化的请求

默认初始化

在函数体外的变量将被初始化为0,定义在函数体内部的变量将不被初始化。所以如果试图拷贝或者访问这个变量将会报错。 绝大多数类都支持无需显式初始化而定义对象,这样的类提供了一个合适的默认值。例如为为非显式初始化的string对象提供一个空字符串。也就是说其值由类决定。但是为了安全起见,建议初始化每一个内置类型的变量

变量声明和定义的关系

c++支持分离式编译机制,也就是分为若干文件,每个文件独立编译。要这样做,我们需要有在文件之间共享代码的方法。 c++将声明和定义区分开,声明使得名字被程序所知,一个文件要使用别的文件定义的名字就必须包含对那个名字的声明。而定义负责创建与名字关联的实体。
extern int i;	//声明而非定义i
int j;	//声明并定义
extern double pi = 3.1416	//抵消了extern的作用
//并且如果在函数内部这样做,会引发错误。
变量只能被定义一次,但可以被多次声明。要在多个文件中使用同一个变量,就必须将声明和定义分离。

总结

这就是关于基本类型的一些知识点,关于标识符作用域请自行查询相关资料。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值