也許我也受了這種影響:在我最早的一些使用“readonly”的例子中
readonly int c = 10;
比這個更具有可讀性:
int readonly c = 10;
我創造的那些最早的使用“const”的(C或C++)代碼,看來已經在全球范圍內取代了“readonly”。
我記得這個語法的選擇在幾個人——例如Dennis Ritchie——當中討論過,但我不記得當時我傾向于哪種語言了。
注意在固定指針(const pointer)中,“const”永遠出現在“*”之后。例如:
int *const p1 = q; // 指向int變量的固定指針
int const* p2 = q; //指向int常量的指針
const int* p3 = q; //指向int常量的指針
使用宏有什么問題?
宏不遵循C++中關于范圍和類型的規則。這經常導致一些微妙的或不那么微妙的問題。因此,C++提供更適合其他的C++(譯注:原文為the rest of C++,當指C++除了兼容C以外的部分)的替代品,例如內聯函數、模板與名字空間。
考慮一下:
#include "someheader.h"
struct S {
int alpha;
int beta;
};
如果某人(不明智地)地寫了一個叫“alpha”或“beta”的宏,那么它將不會被編譯,或者被錯誤地編譯,產生不可預知的結果。例如,“someheader.h”可能包含:
#define alpha ’a’
#define beta b[2]
將宏(而且僅僅是宏)全部大寫的習慣,會有所幫助,但是對于宏并沒有語言層次上的保護機制。例如,雖然成員的名字包含在結構體的內部,但這無濟于事:在編譯器能夠正確地辨別這一點之前,宏已經將程序作為一個字符流進行了處理。順便說一句,這是C和C++程序開發環境和工具能夠被簡化的一個主要原因:人與編譯器看到的是不同的東西。
延伸閱讀
文章來源于領測軟件測試網 http://www.kjueaiud.com/