zoukankan      html  css  js  c++  java
  • 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类型
     
    非打印型的字符  例如  
    另外,我们可以用反斜杠加数字来表示通用转义字符,注意:此处的数字默认是八进制,如需用十六进制需要
    写成,xddd,d为一个或多个16进制数字组成
      7 (bell)      12 (newline)    40 (blank)
        (null)      62 ('2')        115 ('M')
     
    字符串字面值 “HelloWorld”编译器自动在末尾加上一个空字符。因此'a'和"a",后者由'a'和''组成。
    同理也有宽字符串,L"helloworld",里面的每一个字符都是宽字符。包括最后的。
    两个相邻的仅由空格、制表符或换行符分开的字符串字面值(或宽字符串字面值),可连接成一个新字符串字
    面值:
        // 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.typedef 名字
    现有数据类型的同义词
     
    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>  //一般是这样来自定义头文件的,尖括号表示标准头文件

  • 相关阅读:
    Sql语句中IN和exists的区别及应用
    时间戳/Date(1354116249000)/ 转换
    SqlServer不允许更改字段类型(表中已有数据)
    Firefox内存占用过高解决方法
    接口开发中的测试问题
    c# winform 窗体起始位置 设置
    【整理】C#文件操作大全(SamWang)
    C#实现JSON序列化与反序列化
    解决方案资源管理器中跟踪活动项
    C#中方法的参数的四种类型
  • 原文地址:https://www.cnblogs.com/arctanx/p/5227106.html
Copyright © 2011-2022 走看看