先前資訊安全的作業Java的AES程式,想改為想使用BCB改為C++版實作,在改變實作語言時遇到小trouble,我有下面一個只擁有常數資料的類別: public class AESTables { public static final byte[] Sbox = { (byte)0x63 ,(byte)0x7c ,(byte)0x77 ,(byte)0x7b ... } ... } 而直接的想法是下面這個樣子,我認為這樣應該就OK了(嘆) class AESTables { public: static const unsigned char Sbox[] = { 0x63 ,0x7c ,0x77 ,0x7b ... } ... } 結果是沒有辦法compile,我try'n'error許久,最後的結論是只有下面這樣才能compile。 class ts { public: const static int a = 10; const static int b[]; }; 但是這樣只能宣告成功,卻沒辦法使用它,一使用就會產生LinkError。而想要利用default constructor初始化陣列,compiler則是會給予const存取拒絕或認定為不正常的語法。 最後在 Google 上找到 解決方案 了,不過老實說,這方法沒有寫過還真不知道它存在。 class ts { public: const static int a = 10; const static int b[]; const static ClassC c; }; const int ts::b[] = {1, 1, 1, -10, -1}; const ClassC ts::c = ClassC(); const ClassC ts::c(); //簡寫 使用關鍵字: C++ static class member array initialization 2007-10-01 備註 今天在以前買的 參考書 中也看到相同寫法了,由此可見以前都沒學好(汗)。