class mystring {
friend ostream& operator<<(ostream &out, const mystring ss) {
out << ss.s;
return out;
}
private:
string s;
public:
mystring(const char ss[]) {
cout << "constructing mystring : " << ss << endl;
s = ss;
}
};
void outputStringByRef(const mystring &ss) {
cout << "outputString(const string&) " << ss << endl;
}
void outputStringByVal(const mystring ss) {
cout << "outputString(const string) " << ss << endl;
}
int main(void) {
outputStringByRef("string by reference");
outputStringByVal("string by value");
outputStringByRef(mystring("string by reference explict call mystring consructor"));
outputStringByVal(mystring("string by value explict call mystring constructor"));
} ///:~
Xem xét ví dụ trên, chúng tôi không thể sửa đổi biến vượt qua tham chiếu, chúng tôi cũng không thể sửa đổi biến giá trị theo giá trị. Đầu ra của mỗi phương thức giống nhau. Vì vậy, không có sự khác biệt giữa hai phương pháp này phương pháp, tại sao C + + hỗ trợ cả hai phương pháp?Bất kỳ sự khác biệt nào giữa f (const string &) và f (const string)?
cảm ơn.
http://stackoverflow.com/questions/1567138/const-t-arg-vs-t-arg/1567186#1567186 –