類設計和STL經常使用引用參數,因此知道不同引用類型的重載很有用。請看下面三個原型:
void sink(double &r1);
void sank(const double & r2);
void sunk(double && r3);
左值引用參數r1與可修改的左值參數(如double變量)匹配;const左值引用參數r2與可修改的左值參數、const左值參數和右值參數(如兩個double值的和)匹配;最後右值引用參數r3宇右值匹配。注意到與r1或者r3匹配的參數都與r2匹配。這就帶來了一個問題:如果重載使用這三種參數的函數,結果講如何?答案時江調用最匹配的版本:
void staff(double & rs);
void staff(const double & rcs);
void stove(double & r1);
void stove(const double & r2);
void sotve(const double && r3);
這讓你能夠根據參數時左值、const還是右值來定製函數的行爲:
double x = 55.5;
const double y = 32.0;
stove(x);
stove(y);
stove(x+y);
如果沒有定義函數stove(double &&), stove(x+y)將調用函數stove(const double &)。