C++keyword大總結
register:
假設有一些變量使用頻繁,則為存取變量的值少花一些時間,
能夠將該局部變量的值放在CPU的寄存器中,須要時直接從寄存器
中取出參加運算,不必去內存中去存取。由於寄存器的存取速度
遠遠高於內存的存取速度,因此這樣做能夠提高執行效率。這樣的
變量叫做“寄存器變量”,用register做聲明。
說明:
(1)僅僅有局部自己主動變量和形式參數能夠作為寄存器變量,其它
如全局變量則不能夠。
(2)一個計算機系統中的寄存器數目是有限制的,不能定義隨意
多個寄存器變量。
(3)局部靜態變量不能定義為寄存器變量。
const
:
(1)定義的const常量。具有不可變性。
(2)便於進行類型的檢測,消除了一些不安全的隱患。
(3)保護被修飾的東西,防止的意外的改變影響到程序的安全。
(4)提高了代碼的健壯性。語法邏輯性更加嚴謹。
(5)const類型的變量在程序執行時僅僅有一份拷貝,節省空間。
(6)編譯器通常不為普通的const常量分配內存空間,而是將
它們保存在符號表中,使它們成為了編譯期的常量。沒有了存儲
與讀內存的操作,提高了效率。
static:
(1)全局靜態變量或者全局靜態函數:
保護該變量及該靜態函數在其作用域內有效,不能在超出這個
這個作用域的範圍使用。
(2
)全局靜態變量存儲在全局數據區,為初始化的系統會給它默認
初始值。局部靜態變量也是存儲在全局數據區,作用範圍僅僅在
它所屬的作用域內,可是生命周期卻存在project的結束。
(3)靜態成員變量僅僅存在一份拷貝且屬於該類而不屬於不論什麽成員變量,
靜態成員函數僅僅能使用靜態成員變量,由於其不屬於不論什麽一個對象,
僅僅屬於這個類。
volatile:
假設一個基本變量被volatile修飾,等於是告訴編譯器不要優
化該變量,意思就是每次取值都直接從內存中存取操作。這對
每次取值都須要變量存儲在內存的真實有嚴格要求的變量來說,
就能夠聲明為volatile
類型,這在多線程中使用的比較多。
typedef:
(1)定義一種類型的別名。而不是簡單的宏替換,能夠用作同一時候聲明指針
型的多個對象。如:
char *pa,pb//聲明了一個指針變量和一個字符變量。
typedef char* CHAR_PTR
CHAR_PTR pa,pb//此處就聲明了兩個指針變量。
(2)typedef 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;
}
C++keyword大總結