设为首页 加入收藏

TOP

C++ Primer 详解(第二章)(一)
2017-10-13 10:22:08 】 浏览:521
Tags:Primer 详解 第二章

2.1 基本内置类型

1)基本类型

1,注意区分无符号数和有符号数,对于char 类型,分为3种,unsigned char ,signed char ,char ,char 和其他两种之所以不一 样,是因为在一些机器上是char 是带符号的,一些机器上是不带符号的,这对于移植性有很大问题。尽量不要使用char做算术运算,如果实在需要,请指明是unsigne  char,还是signed char.

2,关于类型的选择:
①如果明确知道不会为负,使用无符号类型。  
②对于int型,小的使用int,实在比较大使用long long即可,short 太小,long和int一样大。   
③对于浮点型,一般使用double,因为float位数太小,而且对于运算速度和double相比没什么差别,long double精度太高,没有必要,而且由于long double精度太高,带来的运算代价太高。

2)关于类型的转换

1.类型转换一般以等号左边的为基准
   bool —— int 真为1,假为0。
  int —— bool 0为假,负数和正数都为真。
   浮点型 —— int 只取整数,不四舍五入
3.对于无符号类型,赋值超出范围后,所得到的值是取模后的数。
4.对于有符号类型,赋值超出范围后,所得到的数是未定义的。
5.在一个表达式中,如果又有有符号数,又有无符号数,最终有符号数会被转换为无符号数。(最好别混用)
6.一个机器上short类型占16位,那么可赋值的最大数为2^15-1.

3)字面值常量

 1.浮点数的表示用e或者E表示指数

2. 每个字面值都有其默认的类型,比如 5的默认类型是10进制,5.42的默认类型是double。在进行赋值的时候,会进行类型 转换。例如: float val=5.42;其中5.42默认是double类型的,在赋值前会进行类型转换,这种转换有时候会报错,因此可以修改字面值得默认类型。

1. 一个典型的例子:使用C++11 新规则初始化一个数 

 

float fVal{12.5};//由于12.5默认是double,现在要转换为float精度会损失,编译器就会报错。

 

但是:

float  fVal{12.5F};//12.5F默认类型是float,没有精度损失,编译器不会报错。   

2.后缀修改字面值默认类型:(一般用于数字)

   u || U        unsiged 用于整型
   l || L           long 用于整型
   ll || LL        long long 用于整型
   b || B          二进制
   f || F           float 用于浮点型
   l || L            long double 用于浮点型

 

 3.类型修改:

 前缀修改字面值默认类型:(一般用于字符)

   u            Unicode 16字符
   U            Unicode 32字符 
   L             宽字符 
 u8            UTF-8 
  0             8进制 
  0x             16进制

2.2变量

1)变量的定义

1.变量的定义: 一个基本数据类型+一组声明符(为什么是一组,因为声明符可以相互修饰)
2.建议初始化每个内置类型变量,指针。(优秀代码)
3.初始化和赋值完全不同,初始化时在创建这个变量的时候,赋予一个初始值,赋值是擦除原来的值,用一个新的值代替原来的。
4.区别初始化和赋值就是再看有赋值符号的时候,赋值符号左边有没有一个新的变量产生。
5.初始化的方式一般4种:
int units_sold=0;
int units_sold={0};
int units_sold(0);
int units_sold{0};

其中花括号叫列表初始化,C++ 11新特性,可以防止精度损失。

2)变量的声明&定义

1.为了能将程序拆分开编辑,C++语言是支持分离式编译的。为了支持分离式编译。C++把变量的声明和定义区分开来。声明:使得名字为程序可知,一个文件如果想使用在别处定义变量,就必须有对这个变量的声明。声明不会分配内存。 定义:负责创建与名字相关联的实体。会分配内存。声明可以声明多次,但是定义只能定义一次。

2.声明一个变量在前面添加extern.例如extern int  i;

3.在声明一个变量的时候,不要初始化,这样会抵消extern的作用。

4.P41页(中文版)一句话:声明和定义的区别看起来也许微不足道,但是实际上却非常重要,如果要在多个文件中使用同一个变量,就必须将声明和定义分离。此时,变量的定义必须出现在一个文件中,而其他用到该变量的文件必须对其进行声明,却不能重复声明。困惑:以前刚开始学C++的时候,喜欢用全局变量,在我的眼里,定义在非函数体内的变量就是全局变量。比如定义在Test.h 定义一个int i=0;然后其他文件包含这个头文件不一样也可以用么。为什么非要extern。嗯,后来去实践了一下,在编译链接的时候,会报错,重复定义同一个变量。而只在头文件extern 一个变量,然后在任何cpp文件中定义一次这个变量,就不会再报错了,同时不用include 其他文件,编译器会帮你找到你所声明的变量的定义的地方,这就是extern得作用。函数声明是默认extern的,这个得注意。

由此想到。static的作用。static的作用是使得这个变量只在这个文件中有效,和extern是相反的,因此在一个头文件定义一个静态变量,其他文件再包含这个文件,编译链接的时候也不会出错。

3)标识符

标识符没什么好说的,命名规范:开头必须是字母或者下划线,整个标识符只可以由数字,字母,下划线组成。

命名有两种风格:1.C风格全小写字母:int  stau_code    2.面向对象风格:stauCode.选择一种,坚持下去

4)作用域

一般来说,作用域是用花括号分割开来的{};值得注意的是花括号{}是可以单独存在的,表示一个单独的作用域。

2.3复合类型

1)引用

1.记得Effective C++的中文版,翻译者侯捷老师在前言里面提到,一些感觉中文翻译不够

首页 上一页 1 2 3 下一页 尾页 1/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇支持多进程读取同一个目录 下一篇java数据类型

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目