fork download
  1. /*****************************************************************
  2. Name : 陣列長度的外置(集中定義)
  3. Date : 2017/04/27
  4. By : CharlotteHonG
  5. Final: 2017/04/27
  6. *****************************************************************/
  7. #include <iostream>
  8. using namespace std;
  9.  
  10. // const可以直接初始化
  11. class const_init{
  12. public:
  13. const_init(int len=10):len(len){
  14. cout << "len=" << len << endl;
  15. }
  16. private:
  17. const int len;
  18. };
  19.  
  20. // C11 支持類內定義
  21. // 委託結構定義
  22. struct Array_size{
  23. static const int len = 10;
  24. };
  25. class defstru{
  26. public:
  27. defstru(){
  28. cout << "len=" << sizeof(arr)/sizeof(arr[0]) << endl;
  29. }
  30. private:
  31. int arr[Array_size::len];
  32. };
  33. // 直接定義在類別內也可
  34. class defin{
  35. public:
  36. defin(){
  37. cout << "len=" << sizeof(arr)/sizeof(arr[0]) << endl;
  38. }
  39. private:
  40. static const int len = 10;
  41. int arr[Array_size::len];
  42. };
  43.  
  44.  
  45. // 不支持類內定義可以拉出來定義
  46. struct Array_size2{
  47. static const int len;
  48. };
  49. const int Array_size2::len=10;
  50.  
  51.  
  52. // 拉出來定義要是再不行還可以用 enmu
  53. class defenmu{
  54. public:
  55. defenmu(){
  56. cout << "len=" << sizeof(arr)/sizeof(arr[0]) << endl;
  57. }
  58. private:
  59. enum{Array_size=10};
  60. int arr[Array_size];
  61. };
  62.  
  63.  
  64. // 還有一個手段 constexpr
  65. struct Array_size4{
  66. static constexpr size_t len1(){
  67. return 10;
  68. }
  69. } size;
  70. class deffunc{
  71. public:
  72. deffunc(){
  73. cout << "len=" << sizeof(arr)/sizeof(arr[0]) << endl;
  74. }
  75. private:
  76. int arr[Array_size4::len1()];
  77. int arr2[size.len1()];
  78. };
  79. //================================================================
  80. int main(int argc, char const *argv[]){
  81. defstru a;
  82. defin b;
  83. defenmu c;
  84. const_init d;
  85. deffunc e;
  86. return 0;
  87. }
  88. //================================================================
  89.  
Success #stdin #stdout 0s 15240KB
stdin
Standard input is empty
stdout
len=10
len=10
len=10
len=10
len=10