[Analysis]
Which of the following is the higher I ++ and I efficiency?
(1) There is no difference in efficiency in the case of internal data types;
(2) In the case of custom data type class, ++ is more efficient!
When the user-defined data type is used: ++ I returns an object reference; I ++ always creates a temporary object and destroys it when exiting the function, in addition, the copy constructor is also called when the temporary object value is returned.
[Code]
C ++ code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 |
|
# Include <stdio. h> # Include <stdlib. h> # Include <string. h> # Include <vector> # Include <iostream> Using namespace STD;
Class integer { Public: INTEGER (INT value): V (value) { Cout <"default constructor" <Endl; } INTEGER (const integer & other) { Cout <"copy constructor" <Endl; V = Other. V; } Integer & operator = (const integer & other) { Cout <"Copy assignment" <Endl; V = Other. V; Return * this; }
// ++ I first + 1, then return New Value Integer & operator ++ () { Cout <"INTEGER: Operator ++ ()" <Endl; V ++; Return * this; }
// I ++ first save old value, then + 1, last return old value Integer operator ++ (INT) { Cout <"INTEGER: Operator ++ (INT)" <Endl; Integer old = * this; V ++; Return old; }
Void output () { Cout <"value" <v <Endl; } PRIVATE: Int V; };
Void test_case () { Integer OBJ (10 ); Integer obj2 = OBJ; Integer obj3 (0 ); Obj3 = OBJ; Cout <"--------------" <Endl; Cout <"++ I" <Endl; ++ OBJ; OBJ. Output (); Cout <"I ++" <Endl; OBJ ++; OBJ. Output (); }
Int main () { Test_case (); Return 0; } /* Default constructor Copy constructor Default constructor Copy assignment -------------- ++ I Integer: Operator ++ () Value 11 I ++ Integer: Operator ++ (INT) Copy constructor Value 12 */ |
++ I vs I ++