常量的某些用途並不真的太大的意義。
假設你有以下功能:
void myFunction (const int value);
的常量告訴數值不能在函數內部改變編譯器。該信息對於調用者沒有任何價值。這取決於函數本身來決定如何處理值。對於來電,下面的兩個函數定義的行爲如出一轍他:
void myFunction (const int value);
void myFunction (int value);
因爲值是按值傳遞,這意味着該函數獲取本地副本反正。
另一方面,如果參數是一個引用或指針,事情會變得非常不同。
void myFunction (const MyClass &value);
這告訴值是通過引用傳遞調用者(所以屏幕背後實際上是一個指針),但主叫方承諾不改變價值。 也是一樣的指針:
void myFunction (const MyClass *value);
我們通過一個指向MyClass的(由於性能原因),但該功能保證不變的價值。
如果我們這樣寫:
void myFunction (MyClass * const value);
然後我們又回到詮釋他的第一種情況。 myFunction獲取一個指針,該指針通過值傳遞,並且是const。由於MyFunction獲取指針值的副本,因此調用者無論是否爲const都無關緊要。最重要的是myFunction可以改變值的內容,因爲指針變量本身是const的,但其中的內容不是。
同樣是真實的返回值:
const double squareRoot(double d);
這沒有任何意義。 squareRoot返回一個const double,但由於這是通過'值'傳遞的,因此需要被複制到我自己的局部變量中,我可以隨心所欲地做任何事情。
在另一方面:
const Customer *getCustomer(char *name);
告訴我,GETCUSTOMER我返回一個指向一個客戶,而我不能改變客戶的內容。
其實,這將是更明智的字符指針,內容常量爲好,因爲我不希望功能改變給定的字符串:
const Customer *getCustomer(const char *name);
組合意識到const成員funcs中什麼都沒有做修改參數,但更多的有關修改類變量。 – Jor 2010-10-08 08:02:35