星期四, 5月 29, 2008

C++ programming language constant type

可以宣告一個data type為constant


const int bufSize = 512;


但是不能宣告一個沒有初始值的const data type,這很合理,因為宣告後就不能再改了。


const int bufSize; //compiler error here


那也不能宣告一個pointer指到const data type, 否則就可以經由pointer 修改constant data type.


const int minSalary; // 什麼都漲,只有薪水是固定的
int * pSalary = &minSalary; // error here.
*pSalary+=100000; // 如果可以的話多好


但是可以宣告一個const pointer type指向data, pointer的值本身可變動,也就是可以指向任何data value,但是你無法經由這個pointer去改變指向的data value, 因為pointer本身是constant type的。


const int * pConstInt; // pointer is constant
pConstInt = minSalary; // OK, can point to a constant value
int maxSalary; // this is not a constant value
pConstInt = &maxSalary; // OK too, can be point to a non-constant value.
*pConstInt += 5000; // 哈哈,不要妄想。你不能從這個pointer去改值。


利用這個特性,const pointer data type所指向的東西無法經由pointer修改。這在C++這種基本上所有的function call都是call by value的方式很好用。有時想要傳一整個structure, 但是又不想函式更改structure裡的內容,這時就可以將pointer 加以const 宣告。


func(const largestruct * pVeryLargeStructure) {
... do something you want here...
... 10000 lines of code below,
... but the sturcture pointed by VeryLargeStructure will not be changed.
}

你可以宣告一個const pointer,pointer本身值不能改變,但是指向的data type可以被改變,我沒有想到什麼時候會用到這樣的特性來解決問題。


int * const ptrNotChanged = &minSalary;
ptrNotChanged = &maxSalary; // error here.


其實寫程式寫了這幾年,雖然使用const這樣的keyword看起來微不足道,但是確可以減少debug的時間,一但養成良好的習慣,在你一開始定義的函數的同時就知道不可能改變傳進去的參數時,就加上const modifier,不但可以防止自己出錯的機會,對於將來自己或是別人來維護你的程式時,更是有很大的幫助。

星期五, 5月 16, 2008

好用的網路備份方式 - Mozy (a EMC company service)

參照我的備份方法 ,這裡的備份主要還是備份到外接式硬碟機。再佐以燒錄成光碟的方式,可是用久了(我一年才備份一次光碟),我光碟還是跑出好多張不曉得怎麼處理的光碟。況且以這樣的方式其實沒有異地備份。萬一出亂子的時候(備份就是要預防出了亂子的時候)還真是麻煩。

EMC是一間非常有名的儲存備份公司,他推出了網路備份的服務,你只要申請一個帳號,它就先給你2GB的網路儲存空間,下載安裝好它的備份程式後,它就默默的在背後幫你備份。不只這樣,這間公司的備份軟體使用介面極佳,很多細節都有考慮到給一般的人使用。


舉例來說,備份不是使用檔案夾的關念來選擇,而是檔案類型。
mozy_backupset

或是平常資料已經整理的很好了,你覺得類型不好用,想用自行檔案的方式來選擇。
mozy_filesystem

至於什麼時候備份的選項也是很聰明,可以自動選擇在電腦不忙的時候自動備份。
mozy_schedule

一旦裝好之後,只要電腦有寛頻,基本就可以不用理會,它會自動備份,完全不用操心。至於復原的方法也很方便從手冊上讀來也是很方便,基本上這是一家備份軟體做的非常好的解決方案,加上有EMC加持,我覺得沒有什麼理由不用,更加上如果你只備份2GB,它還不用錢。

如果你覺得不錯,想要申請,也覺得我這篇介紹不錯,申請帳候麻煩點一下我的連結https://mozy.com/?code=3SDB5A或是在建立帳號時,填入referral(介紹人)3SDB5 這個代號。被介紹人以及介紹人都可以增加250MB的儲存空間。