C++关键字大总结

原创 2015年07月09日 15:31:15
register:
    如果有一些变量使用频繁,则为存取变量的值少花一些时间,
可以将该局部变量的值放在CPU的寄存器中,需要时直接从寄存器
中取出参加运算,不必去内存中去存取。由于寄存器的存取速度
远远高于内存的存取速度,因此这样做可以提高执行效率。这种
变量叫做“寄存器变量”,用register做声明。
说明:  
     (1)只有局部自动变量和形式参数可以作为寄存器变量,其他
     如全局变量则不可以。
     (2)一个计算机系统中的寄存器数目是有限制的,不能定义任意
            多个寄存器变量。
     (3)局部静态变量不能定义为寄存器变量。
const:
     (1)定义的const常量,具有不可变性。
     (2)便于进行类型的检测,消除了一些不安全的隐患。
     (3)保护被修饰的东西,防止的意外的改变影响到程序的安全。
     (4)提高了代码的健壮性,语法逻辑性更加严谨。
     (5const类型的变量在程序运行时只有一份拷贝,节省空间。
     (6)编译器通常不为普通的const常量分配内存空间,而是将
      它们保存在符号表中,使它们成为了编译期的常量,没有了存储
      与读内存的操作,提高了效率。
static:
     (1)全局静态变量或者全局静态函数:
          保护该变量及该静态函数在其作用域内有效,不能在超出这个
          这个作用域的范围使用。
     (2)全局静态变量存储在全局数据区,为初始化的系统会给它默认
          初始值。局部静态变量也是存储在全局数据区,作用范围只在
          它所属的作用域内,但是生命周期却存在工程的结束。
     (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)为一个复杂的声明起一个简单或者容易标记的名字。
define:
      (1)对变量只在预处理阶段做原模原样的替换,不做任何的类型检测,主要是
            定义变量或者定义函数。
      (2)使用ifndef,define,endif来防止重复引用。
静态库:
            1.浪费空间,每个程序都有一份。
            2.如果有一个地方修改了则需要重新的编译加载。
            3.执行速度快,不需要动态加载。
    动态库:
            1.动态库只是导出一个动态表,在程序运行的时候他动态加载。
            2.多个程序共享
            3.运行时加载,可以很容易的修改,就是打补丁。
            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;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

C++再论单例模式

#include #include #include std::mutex gmutex; using namespace std;template class Singleton { publ...

C++链表冒泡排序

#include using namespace std; //别问我为什么要写链表的冒泡排序,操蛋操蛋操蛋。 struct Node { int data; Node *next;...

C++智能指针大总结

//最挫的智能指针。 #include using namespace std; template class my_auto_ptr { public: my_auto_ptr(Type* ...

C++求解最大子矩阵之和

#include using namespace std; //求最大子矩阵的和。 //将多维数组想象成一维数组求最大的子序列和来计算。 int Grial(int n,int a[]) { ...

SOCKET编程

server.cpp#include #include #include #define PORT 5000 using namespace std; #pragma comment(lib,"...

C++腾讯笔试题

#include using namespace std; //产生任意范围的随机数。 int Grial(int i,int j ) { int x = 0; while (!(x...

C++两道笔试题

//现给定一个含有n个元素的数组,请随机获取其中的m个元素(不能重复获取)。#include #include using namespace std; void Grial(int a[], i...

C++单链表递归逆序

#include using namespace std; struct Node { int data; Node *next; Node(int d = int()) :...

C++笔试题经典的两个

//实现一个自己版本的string。 #include #include using namespace std;class String { public: String(const c...

C++二叉树笔试题

#include #include #include using namespace std;template struct Node { Node* right; Node* ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)