fork download
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. struct test {
  5.  
  6. // 宣言
  7. static const int a = 0xAA;
  8. static const int b = 0xBB;
  9.  
  10. static int c;
  11. static int d;
  12.  
  13. };
  14.  
  15. // 定義
  16. const int test::a;
  17.  
  18. int test::c = 0xCC;
  19.  
  20. // 定義しない
  21. // const int test::b;
  22. // int test::d = 0xDD;
  23.  
  24. int main() {
  25. // your code goes here
  26. cout << hex;
  27.  
  28. // 宣言も定義もされているので、どちらもOK
  29. cout << "static const int &a : 0x" << (int)(&test::a) << endl;
  30. cout << "static const int a : 0x" << (int)(test::a) << endl << endl;
  31.  
  32. // 定義がないため、実体の必要な操作はエラー
  33. // cout << "static const int &b : 0x" << (int)(&test::b) << endl;
  34.  
  35. // でも名前は定数のエイリアスとして使用可能
  36. cout << "static const int b : 0x" << (int)(test::b) << endl << endl;
  37.  
  38. // 宣言も定義もされているので、どちらもOK
  39. cout << "static int &c : 0x" << (int)(&test::c) << endl;
  40. cout << "static int c : 0x" << (int)(test::c) << endl << endl;
  41.  
  42. // 定義がないため、実体の必要な操作はエラー
  43. // cout << "static int &d : 0x" << (int)(&test::d) << endl;
  44.  
  45. // 値の参照に実体が必要なのでエラー
  46. // cout << "static int d : 0x" << (int)(test::d) << endl << endl;
  47.  
  48. return 0;
  49. }
  50.  
Success #stdin #stdout 0s 3340KB
stdin
Standard input is empty
stdout
static const int &a : 0x8048910
static const int  a : 0xaa

static const int  b : 0xbb

static       int &c : 0x8049b5c
static       int  c : 0xcc