On Sunday 19 March 2006 18:45, Steve Graegert wrote: > On 3/19/06, Shriramana Sharma <samjnaa@xxxxxxxxx> wrote: > > Suppose there is a function f() which returns an integer and does not > > change any value of the class it belongs to, should I declare it as: > > I don't understand what you mean here. > > > const int f(); > > By declaring a const return type you are promising that the original > variable (inside the function's stack frame) will not be modified. > Because you're returning it by value, it's copied so the original > value could never be modified via the return value. This qualifier > has not meaning for primitive builtin types. This is different for > user-defined types: if a function returns a class object by value as > const, the return value of that function cannot be an lvalue (that is, > it cannot be assigned to or otherwise modified). It can have a meaning for built in types, too. For example you could do something like this: int& f(...) {....} Through this you could actually change a value inside the class. Or cause a segfault - depending on what you return, a member or a temp variable :) Constructs of this kind are only usable of you pass back a reference to a member that lives beyond the function call, of course. If you use const you make sure that your reference is read-only. > > > or > > > > int f() const; > > Marks a function as const allowing it to be called by const objects > (btw, const objects can only call const member functions). This > construct is usually found as part of member functions declarations, > which are known to be immutable. > > You probably want to choose the latter one. > > \Steve > - > : send the line "unsubscribe > linux-c-programming" in the body of a message to majordomo@xxxxxxxxxxxxxxx > More majordomo info at http://vger.kernel.org/majordomo-info.html - : send the line "unsubscribe linux-c-programming" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html