????C++??????????????????????п?????????????????????????????—?????????????????????????????non-heap object????????о??????????????????????????????Ч????????????????????????????????????????С??????????????????????????????????????????????????????????
????????????????????????4???????
????· ???????
????· ???????
????· ???????
????· ??????
?????????????????????
????1??????????????????????ú??????ó????????????????????? “???????????????????????????????????????????????????” ?????
???????磺
????void test(const string& str);
????char buffer[] = "buffer";
????test(buffer); // ??????????????
??????????????????????????????????????????????string????????????????buffer?????????string constructor????test?????????????????????????????
????????????????reference?????????????е?????????????reference-to-const??????????????????????????????reference-to-non-const???????????????
???????磺
????void upper??string& str);
????char lower[] = "lower";
????upper(lower); // ???????????????????
??????????????????reference-to-non-const????????????????????????????????????????????????????????????????μ?????????????????У??????????????upper???У???lower?е????????д???????????????????????char lower[]???????“lower”?????????????????
???????????????????????????????????????????????????????constructor?explicit??????explicit???????????????????constructor?????????????
???????磺
????explicit string(const char*);
????2??????????????????????ú??????ó????????????????????????????????ζ??βε???????T formalArg = actualArg?????????
???????磺
????void test??T formalArg);
????T actualArg;
????test(actualArg);
???????????????????α?????
????T _temp;
????_temp.T::T(acutalArg); // ?????????????????_temp
????g(_temp);  // ?????????_temp
????_temp.T::~T(); // ????_temp
?????????????????formalArg??test???????????н?????formalArg???λ???????????????????actualArg???????formalArg???λ???С????????????????????????????
????3??????????????????????????????????????????????????????
???????磺
class Integer {
public:
friend Integer operator+(const Integer& a?? const Integer& b);
Integer(int val=0): value(val) {
}
Integer(const Integer& rhs): value(rhs.value) {
}
Integer& operator=(const Integer& rhs);
~Integer() {
}
private:
int value;
};
Integer operator+(const Integer& a?? const Integer& b) {
Integer retVal;
retVal.value = a.value + b.value;
return retVal;
}
Integer c1?? c2?? c3;
c3 = c1 + c2;
???????????????α????
struct Integer _tempResult; // ????λ?????????ù?????
operator+(_tempResult?? c1?? c2); // ???в????????????
c3 = _tempResult; // operator=???????
Integer operator+(const Integer& _tempResult?? const Integer& a?? const Integer& b) {
struct Integer retVal;
retVal.Integer::Integer(); // Integer(int val=0)???
retVal.value = a.value + b.value;
_tempResult.Integer::Integer(retVal); // ??????????Integer(const Integer& rhs)??У????????????
retVal.Integer::~Integer(); // ???????????
return;
}
return retVal;
}
?????????operator+???з?????????RVO??Return Value Optimization???????????????????????
???????磺
????Integer operator+(const Integer& a?? const Integer& b) {
????return Integer(a.value + b.value);
????}
???????????????α????
????Integer operator+(const Integer& _tempResult?? const Integer& a?? const Integer& b) {
????_tempResult.Integer::Integer(); // Integer(int val=0)???
????_tempResult.value = a.value + b.value;
????return;
????}
?????????????汾???????????????????retVal???????
????4???????壺
???????磺
????Integer i1(100); // ????????????????????????
????Integer i2 = Integer(100); // ?????????????????????
????Integer i3 = 100; // ?????????????????????
????????????????????????????????????????????????????????????????????Ч?????????????
?????????
???????????????????????C++????????????????????????????????????????е????????衣????????????????????????????
????????????????????????????????????Χ??????????磺
????????objA >1024??&&??objB <1024?? ?? ?? ??objA – objB?? ????objB-objA??
????????????????????5??????????Χ???????????κ??????????????????κ?????????????????????????????????????????????
?????????????????????????2??????
????1?????????????????????object??????磺
????String progName("test");
????String progVersion("ver-1.0");
????String progNameVersion = progName + progVersion
???????progName + progVersion????????????????????????????????????progNameVersion??????????????C++????漲?????б?????н??????????????????object?????????????????
????С???????????
????const char* progNameVersion = progName + progVersion
????????????????????????????????????????α?????
????String _temp;
????operator+(_temp?? progName?? progVersion);
????progNameVersion = _temp.String::operator char*();
????_temp.String::~String();
????2?????????????????reference????????磺
????const String& name = "C++";
????????????????α?????
????String _temp;
????temp.String::String("C++");
????const String& name = _temp;
????????????????C++???????????????????????????????????reference???????????????????????reference???????????????????????????????Χ????—–???????????????????