Chapter 2.  Variables and Basic Types

1.基本内置类型(Primitive Built-in Types)

 
除了算数类型外还定义了一种称为void的特殊类型。
 
算数类型是如何在计算机中存储的?
  1. 每一个字节和一个称为地址的数关联起来
  2. 要让地址对应的字节有意义,我们需要知道存储在该地址的值得类型,从而知道需要多少位和如何解释这些位。
 
可以将算数类型的任何值赋给bool对象。0值算数类型代表false,任何非0都代表true。
 
signed and unsigned types.  前者可以表示正负0,后者只能表示非负数,即正数和0。
 
C++中,把负值赋给unsigned对象是完全合法的, -1赋给8位的unsigned char,那么结果是255,因为255是-1

对256求模后的值。

 
浮点型,float一般用一个字(32位)来表示,只能保证6位有效数字。而double型一般用两个字(64位)来表示
,至少是10位有效数字。
 
因为C++的整型数设计的很开放,就像C语言一样,能够在有必要的时候直接处理硬件,所以对大多数程序员来
说,应该通过限制实际使用的类型来忽略这些复杂性。
 
比如用整型计数的时候,当你统计标准库容器元素的个数的时候,最好用标准库为你定义的计数类型, 除此之外,

使用unsiged比较明智,因为可以避免越界导致结果为负数的可能性。

1. 整型算数运算的时候,尽量别用short,以防止赋值越界,后果可能是产生一个很大的复数。
2. 用32位表示int,64位表示long的机器,会出现选择int还是long的难题, 用 long 类型进行计算所付出的

行时代价远远高于用 int 类型进行同样计算的代价,所以选择类型前要先了解程序的细节并且比较 long 类型与

int 类型的实际运行时性能代价。

3. 决定使用哪一种浮点型就容易多了。使用 double 类型基本上不会有错。在 float 类型中隐式的精度损失 是不

能忽视的,而 double 类型精度代价相对于 float 类型精度代价可以忽略。事实上,有些机器上,double 类型比

float 类型的计算要快得多。long double 类型提供的精度通常没有必要,而且还需要承担额外的运行代价。

 

 
 
2.字面值常量 (Literal Constants)
表示内置类型的值的常量就叫做字面值常量,而类类型或者标准库类型都没有字面值。
 
整型:
    20    // decimal 10进制
    024    // octal 8进制
    0x14  // hexadecimal 16进制
    128u    /* unsigned  */          1024UL    /* unsigned long  */
    1L      /* long    */                  8Lu        /* unsigned long  */
没有short类型的字面值常量
 
浮点型(默认的浮点字面值常量为 double 类型):
    3.14159F            .001f          12.345L            0.
    3.14159E0f          1E-3F          1.2345E1L          0e0
 
布尔型的字面值 true false 
 
打印型字符的字面值
'a'     '2'     ','      ' '   
L'a'  //宽字符,wchat_t类型
 
非打印型的字符  例如 \n  \b
另外,我们可以用反斜杠加数字来表示通用转义字符, 注意:此处的数字默认是八进制,如需用十六进制需要
写成,\xddd,d为一个或多个16进制数字组成
  \7 (bell)      \12 (newline)    \40 (blank)
    \0 (null)      \062 ('2')        \115 ('M')
 
字符串字面值 “HelloWorld”编译器自动在末尾加上一个空字符。因此'a'和"a",后者由'a'和'\0'组成。
同理也有宽字符串,L"helloworld",里面的每一个字符都是宽字符。包括最后的\0。
两个相邻的仅由空格、制表符或换行符分开的字符串字面值(或宽字符串字面值),可连接成一个新字符串字
面值:
    // concatenated long string literal
    std::cout << "a multi-line "
                  "string literal "
                  "using concatenation"
              << std::endl;
连接字符串字面值和宽字符串字面值的行为是未定义的。结果是受很多因素影响的。不要依赖未定义行为,尽
量杜绝出现。
 
C++允许用反斜杠来连接语句:
      // ok: A \ before a newline ignores the line break
      std::cou\
      t << "Hi" << st\
      d::endl;
 
          // multiline string literal
          std::cout << "a multi-line \
      string literal \
      using a backslash"
                    << std::endl;
          return 0;
      }
后继行的行首的空格会算到字符串里面,因此不能有缩进。

 

 
 
3.变量(Varible)
为什么要有变量?
  1. 变量可以重复利用并计算,减少代码冗杂。
  2. C++是强静态类型语言,在编译时会检查,操作对象是否能够被这样子操作,这种机制能使得在程序越来
越复杂的时候,帮助我们更早的发现错误。
 
什么是变量?
变量提供了程序可以操作的有名字的存储区。
 
什么是对象?
内存中具有类型的区域。
我们可以自由地使用对象描述程序中可操作的大部分数据,而不管这些数据是内置类型还是类类型,是有名字的
还是没名字的,是可读的还是可写的。
 
规定变量命名要以字母或下划线开头,变量命名习惯最重要的是保持一致。
 
变量定义:
    double salary, wage;    // defines two variables of type double
      int month,
          day, year;          // defines three variables of type int
      std::string address;    // defines one variable of type std::string
 
变量初始化和赋值是两种不同的操作。直接初始化语法更灵活效率更高。
变量初始化方式是多变可以混合的,具体如下。

 #include <string>

      // ok: salary defined and initialized before it is used to initialize wage
      double salary = 9999.99,
            wage(salary + 0.01);
      // ok: mix of initialized and uninitialized
      int interval,
          month = 8, day = 7, year = 1955;
      // ok: both forms of initialization syntax used
      std::string title("C++ Primer, 4th Ed."),
                  publisher = "A-W";

 

extern是声明,任何变量都需要声明或定义。
 
命名一样的时候,局部变量屏蔽全局变量。
 
for(int i=0;i<2;i++) 此处的i作用域在for循环外面。
 
4.const限定符
非const变量默认为extern,所以不用显式声明为extern。但是在一个文件中的全局变量如果是const类型的
话,要让它可以在别的文件中可用,就必须显式声明为 extern const 
 
5.References引用
引用是一种符合类型,是一种别名。
 
普通引用应该绑定到它的对象上。
 
不能把普通引用绑定到const类型,只能将其定义为const引用。  const int a = 100; const int &b=a;
 
double a=1.0;
int &b = a;  // 不允许
const int &b = a; //允许。此处的a会被强制转换为int型。
 
6.t ypede f 名字
现有数据类型的同义词
 
7.Enumerations枚举
enum成员的值可以一样
  // point2d is 2, point2w is 3, point3d is 3, point3w is 4
    enum Points { point2d = 2, point2w,
                  point3d = 3, point3w };
 
枚举类型是唯一的类型,枚举成员是常量。不能将其他类型的值赋给枚举类型,只能在初始化的时候赋给
它,而且初始化的值也只能是常量表达式。

 

8.Class类

  和Struct的区别,仅仅只是默认访问级别不同,class是p'rivate,而struct默认为public。

 

9.头文件的编写和预处理技术
头文件用于声明而不是定义,一些const对象可以定义在头文件里的时候,是需要用常量表达式初始化的。
避免重复包含,可以用预处理器变量
    #ifndef SALESITEM_H
    #define SALESITEM_H
    // Definition of Sales_itemclass and related functions goes here   //
   #endif
   #include <standard_header>  //一般是这样来自定义头文件的,尖括号表示标准头文件

转载于:https://www.cnblogs.com/arctanx/p/5227106.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值