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"));
} ///:~
Учитывая приведенный выше пример, мы не смогли изменить переменную pass-by-reference, и мы не можем изменить переменную pass-by-value. Результат каждого метода одинаковый. Поскольку нет никакой разницы между этими двумя метод, почему C++ поддерживает оба метода?Любые различия между f (const string &) и f (const string)?
спасибо.
Связанный http://stackoverflow.com/questions/1567138/const-t-arg-vs-t-arg/1567186#1567186 –