2009-07-22 20 views
1

我有一個碼的下述(簡化版本):申報陣列尺寸而不#定義的

#define MESSAGE_SIZE_MAX 1024 
#defined MESSAGE_COUNT_MAX 20 

class MyClass { 
public: 
    .. some stuff 
private: 
    unsigned char m_messageStorage[MESSAGE_COUNT_MAX*MESSAGE_SIZE_MAX]; 
}; 

我不喜歡定義,這對MyCalss的所有用戶可見。

我怎麼能做到這一點的C++風格?

感謝 迪馬

回答

5

訣竅讓這樣的事情到class定義是,

// public: 
enum {MESSAGE_SIZE_MAX=1024, MESSAGE_COUNT_MAX=20}; 

我從來不喜歡#defines像常量使用。
它總是一個很好的做法是使用enum

6

你爲什麼不乾脆用一個常數?

const int message_size_max = 1024; 

請注意,與C不同,C++使得全局範圍內的常量變量默認具有靜態鏈接。

常數可變上面是一個常量表達式,因此可以被用來指定數組大小。

char message[message_size_max]; 
+0

它將靜態鏈接到所有使用MyClass的對象,從而向它們添加垃圾。 – dimba 2009-07-22 15:33:01