zoukankan      html  css  js  c++  java
  • C++keyword大总结

    register:
        假设有一些变量使用频繁,则为存取变量的值少花一些时间,
    能够将该局部变量的值放在CPU的寄存器中,须要时直接从寄存器
    中取出參加运算,不必去内存中去存取。

    由于寄存器的存取速度 远远高于内存的存取速度,因此这样做能够提高执行效率。这样的 变量叫做“寄存器变量”,用register做声明。

    说明: (1)仅仅有局部自己主动变量和形式參数能够作为寄存器变量,其它 如全局变量则不能够。 (2)一个计算机系统中的寄存器数目是有限制的,不能定义随意 多个寄存器变量。

    3)局部静态变量不能定义为寄存器变量。 const: (1)定义的const常量。具有不可变性。 (2)便于进行类型的检測,消除了一些不安全的隐患。 (3)保护被修饰的东西,防止的意外的改变影响到程序的安全。

    4)提高了代码的健壮性。语法逻辑性更加严谨。

    5const类型的变量在程序执行时仅仅有一份拷贝,节省空间。

    6)编译器通常不为普通的const常量分配内存空间,而是将 它们保存在符号表中,使它们成为了编译期的常量。没有了存储 与读内存的操作,提高了效率。

    static: (1)全局静态变量或者全局静态函数: 保护该变量及该静态函数在其作用域内有效,不能在超出这个 这个作用域的范围使用。 (2)全局静态变量存储在全局数据区,为初始化的系统会给它默认 初始值。局部静态变量也是存储在全局数据区,作用范围仅仅在 它所属的作用域内,可是生命周期却存在project的结束。 (3)静态成员变量仅仅存在一份拷贝且属于该类而不属于不论什么成员变量, 静态成员函数仅仅能使用静态成员变量,由于其不属于不论什么一个对象, 仅仅属于这个类。

    volatile: 假设一个基本变量被volatile修饰,等于是告诉编译器不要优 化该变量,意思就是每次取值都直接从内存中存取操作。这对 每次取值都须要变量存储在内存的真实有严格要求的变量来说, 就能够声明为volatile类型,这在多线程中使用的比較多。

    typedef: (1)定义一种类型的别名。而不是简单的宏替换,能够用作同一时候声明指针 型的多个对象。如: char *pa,pb//声明了一个指针变量和一个字符变量。

    typedef char* CHAR_PTR CHAR_PTR pa,pb//此处就声明了两个指针变量。

    2typedef struct Node { }Node;//在旧的C语言中用的比較多。为结构体又一次起一个别名。

    3)用typedef来定义与平台无关的类型。 比方定义一个VAL的浮点类型,在目标平台上能够表示高精度的范围。 typdef double VAL; 可是在还有一个平台上不支持double类型,我们能够在这个平台上这样 typedef float VAL; 这样就能够跨平台的定义自己合适的类型,而不须要改动大量的代码。 (4)为一个复杂的声明起一个简单或者easy标记的名字。 define: (1)对变量仅仅在预处理阶段做原模原样的替换,不做不论什么的类型检測,主要是 定义变量或者定义函数。 (2)使用ifndef,define,endif来防止反复引用。

    静态库:
                1.浪费空间。每一个程序都有一份。

    2.假设有一个地方改动了则须要又一次的编译载入。

    3.执行速度快,不须要动态载入。 动态库: 1.动态库仅仅是导出一个动态表。在程序执行的时候他动态载入。 2.多个程序共享 3.执行时载入。能够非常easy的改动。就是打补丁。

    4.执行的动态载入会花费一定的时间。

    }

    #include <iostream>
    #include <math.h>
    using namespace std;
    //希尔排序。
    void Shell(int a[],int n)
    {
        //增量取值。
        //x=log10(n)此函数存在。
        //(log(a)(b))=lg(b)/lg(a)或ln(b)/ln(a) 。

    int m = n;//保存一份长度。 int len = log10(n) / (log10(2))+3; int *b = new int[len]; int k = 0; int temp; while (n > 1) { b[k++] = (n / 2 + 1); if (n / 2 == 1)break; n = (n / 2) + 1; } b[k++] = 1; for (int i = 0; i < k; ++i) { temp = b[i]; for (int j = 0; j < m-temp; ++j) { if (a[j]>a[j + temp]) { a[j] ^= a[j + temp]; a[j + temp] ^= a[j]; a[j] ^= a[j + temp]; } } } } int main() { int a[] = { 9, 8, 7, 6, 5, 4, 3, 2, 1, 4, 5, 6, 0, 1, 2, 3, 5534, 5, 542, 3, 4, 6, 7, 8, 6, 123 }; //int a[] = { 5, 4, 3, 2, 1 }; Shell(a, sizeof(a) / sizeof(int)); for (int i = 0; i < sizeof(a) / sizeof(int); i++) { cout << a[i] << " "; } cout << endl; return 0; }

  • 相关阅读:
    通过注册表选择文件默认打开方式
    oracle的imp和exp
    oracle 10g正则表达式 REGEXP_LIKE 用法
    oracle varchar 和varchar2的区别
    Oracle lower(Upper)函数|大小写|
    NC资金管理对外付款自动选上“网上支付”设置
    wmsys.wm_concat的几个用法
    GridView使用初步
    JavaScript学习笔记(一)—细节问题
    图片水印功能
  • 原文地址:https://www.cnblogs.com/cynchanpin/p/7295843.html
Copyright © 2011-2022 走看看