References to const
Declaring a reference parameter to be const tells the compiler to make sure that the function does not attempt to change that object. For objects larger than a pointer, a reference to const is an efficient alternative to a value parameter because no data is copied. Example 5.14 contains three functions, each accepting a parameter in a different way.
Example 5.14. src/const/reference/constref.cpp
class Person { public: void setNameV( QString newName) { newName += " Smith"; <-- 1 m_Name = newName; } void setNameCR( const QString& newName) { // newName += " Python"; <-- 2 m_Name = newName; } void setNameR( QString& newName) { m_Name += " Dobbs"; <-- 3 m_Name = newName; } private: QString m_Name; }; int main() { Person p; QString name("Bob"); p.setNameCR(name); <-- 4 // p.setNameR("Monty"); <-- 5 p.setNameCR("Monty"); <-- 6 p.setNameV("Connie"); <-- 7 p.setNameR(name); <-- 8 cout << name; } (1)Changes a temporary that's about to be destroyed. (2)Error: Can't change const&. (3)Changes the original Qstring. (4)No temporaries are created. (5)Error: Cannot convert to a QString&. (6)char* converts to temporary and gets passed by const reference. (7)Temporary QString #1 is created to convert char* to QString. Temporary #2 is created when it is passed by value. (8)No temporaries are created. |