A reference serves as an alternative name or alias to an object. We cannot define reference to a reference type, but can make a reference to any other data type. C++ imposes several limitations on references. In particular, C++ does not allow you to change which memory a reference points to. Thus, all references are effectively 'const' references. Like normal constant objects, references must be given a value upon declaration.
What should we use then?
MyString& const ref = obj;OR
MyString const &ref = obj;
/********************************************************
A reference Example
********************************************************/
#include <iostream>
using namespace std;
class MyString{
public:
MyString(const string& str);
~MyString();
void printString() const;
private:
MyString();
MyString(const MyString&);
string m_str;
};
MyString::MyString(const string& str){
m_str = str;
}
MyString::~MyString(){
}
void MyString::printString() const {
cout << m_str;
cout << endl;
}
int main(){
MyString pStr("P");
MyString qStr("Q");
MyString rStr("R");
MyString sStr("S");
// refStr is a reference to pStr
MyString &refStr = pStr;
refStr.printString();
pStr.printString();
// refStr is assigned value at qStr but reference
// still points to pStr
refStr = qStr;
refStr.printString();
pStr.printString();
qStr = rStr;
// refStr value remains unchanged
refStr.printString();
pStr.printString();
pStr = sStr;
// refStr being reference to pStr, it's value is changed
// as pStr value is changed
refStr.printString();
pStr.printString();
return 0;
}In the following example, reference itself is a 'const' and is pointing to the data which is not. The code compiles successfully in Microsoft Visual Studio and refStr value is allowed to change but in GCC, throws the error: `const' qualifiers cannot be applied to `MyString&'
MyString& const refStr = pStr; //
In this case the safest solution is to declare reference to the 'const' value as follows
MyString const &refStr = pStr;
OR
const MyString &refStr = pStr;
The compiler will an error whenever the 'const' value pointed by refStr is changed.
refStr = qStr;
// throws an error if MyString const &refStr = pStr;
//OR
//const MyString &refStr = pStr;
No comments :
Post a Comment