fork download
  1. #include <stdio.h>
  2.  
  3. #define COUNT 5
  4. typedef int(&DEF_ARRAY)[COUNT];
  5. class A
  6. {
  7. public:
  8. int m_Array[COUNT];
  9. /* error
  10. int(&)[COUNT] GetArray( void ) { return m_Array; }
  11. */
  12. A()
  13. {
  14. for( int i=0; i<int(sizeof( m_Array )/sizeof( m_Array[0] )); ++i )
  15. {
  16. m_Array[i] = i;
  17. }
  18. }
  19. DEF_ARRAY GetArray( void ) { return m_Array; }
  20. };
  21.  
  22. void ReceiveArray( int array[COUNT] )
  23. {
  24. printf( "%d / %d\n", sizeof( array[0] ), sizeof( array ) );
  25. for( int i=0; i<int(sizeof( array )/sizeof( array[0] )); ++i )
  26. {
  27. printf( " [%d] %d\n", i, array[i] );
  28. }
  29. }
  30. void ReceiveArrayRef( int(&array)[COUNT] )
  31. {
  32. printf( "%d / %d\n", sizeof( array[0] ), sizeof( array ) );
  33. for( int i=0; i<int(sizeof( array )/sizeof( array[0] )); ++i )
  34. {
  35. printf( " [%d] %d\n", i, array[i] );
  36. }
  37. }
  38.  
  39. int main( void )
  40. {
  41. A a;
  42. /* error
  43. int array[COUNT] = a.GetArray();
  44. */
  45. int (&arrayRef)[COUNT] = a.GetArray();
  46. puts( "a.m_Array" ); ReceiveArray( a.m_Array );
  47. puts( "a.m_Array" ); ReceiveArrayRef( a.m_Array );
  48. puts( "arrayRef" ); ReceiveArrayRef( arrayRef );
  49. arrayRef[2] = 99;
  50. puts( "a.m_Array" ); ReceiveArrayRef( a.m_Array );
  51. puts( "arrayRef" ); ReceiveArrayRef( arrayRef );
  52. return 0;
  53. }
Success #stdin #stdout 0s 3340KB
stdin
Standard input is empty
stdout
a.m_Array
4 / 4
  [0] 0
a.m_Array
4 / 20
  [0] 0
  [1] 1
  [2] 2
  [3] 3
  [4] 4
arrayRef
4 / 20
  [0] 0
  [1] 1
  [2] 2
  [3] 3
  [4] 4
a.m_Array
4 / 20
  [0] 0
  [1] 1
  [2] 99
  [3] 3
  [4] 4
arrayRef
4 / 20
  [0] 0
  [1] 1
  [2] 99
  [3] 3
  [4] 4