本篇筆記總結自一次代碼檢視。
一般來說,使用C語言編程時我們都習慣在代碼當中使用C當中的宏定義來定義一個數值常量:
#define MY_CONST 7
在C++開發項目時,也會經常存在沿襲C當中常量用法情況。所以,如下的一種寫法看起來反倒覺得有些不正宗了:
class MyClass {
static const int my_const = 7;
// ...
};
站在編譯器的角度,這兩種寫法都是合法的,但在使用的時候總得二中擇一,究竟哪種更合適呢?之前有所耳聞在C++中應該盡可能少的使用C風格的宏定義,這又是為什麼呢?
在查找一些資料之後發現,對於減少C當中的宏定義的主要因為下面幾個原因:
在C++當中定義一個常量有兩種方式,其一是使用static const,另外一種是使用enum。比如:
class MyClass {
static const int my_const = 7;
enum {another_const = 7};
// ...
};
對於這兩種方式,又有一些小名堂在裡面。對於在類當中使用const來定義常量時,必須要使用static來修飾該常量,並且需要在類定義外部對該常量做出聲明。而對於enum來說大可不必如此,所以Bjane Stroustrup在他維護的FAQ當中建議使用enum這種方式來定義常量。
總歸來說,在C++當中定義in-class常量可以有多種方法,可行的就有如上提到的三種定義方法。在編寫私有項目時當然看個人的喜好,想用哪一種就用哪一種;當作為開發團隊的一員的時候遵循團隊倡導的代碼規范顯得更為可取。在這裡個人偏向enum這種定義方法,同時我會選擇將常量全部大寫:)
class MyClass {
enum {MY_CONST = 7};
// ...
};