Immortal Nephi <>, on 24/08/2010 08:23:23, wrote:
> I need to follow best practice guideline how to design my code
> correctly. I have to decide which either global function or class can
> be chosen.
> I will use global function if global function is available to all
> file scopes or is in namespace scope. I need to avoid data
> modification when necessary.
> I can write good global function.
>
> int gFunc( int x, int y ) {
> // Do something
> // ….
>
> return z;
> }
>
> If I have to modify either x or y in the function parameter, I will
> put const in function parameter or create temporary variable.
>
> int gFunc( const int x, const int y ) {
> // Do something
> // ….
>
> return z;
> }
>
> // or…
>
> int gFunc( int x, int y ) {
> int temp_x = x;
> int temp_y = y;
>
> // Do something
> // ….
>
> return z;
> }
>
> If I want to put character buffer (like string) or class name in the
> function parameter, I will need to put reference in it to avoid
> overhead of copying each data size. Also, I will remember to put
> const before reference if necessary.
>
> class Object {
>
> int x;
> int y;
> int z;
> }
>
> Object gFunc( const Object& obj ) {
> Object temp_obj;
>
> // Do something
> // ….
>
> return temp_obj;
> }
>
> The return type requires to create temporary object before all data
> members in class Object is copied and temp_obj is destroyed from the
> stack.
>
> Tell me why you have reason to add reference to the return type.
Anytime you need to pass something by reference. That's that simple.
> class Data {
> int x;
> int y;
> int z;
> };
>
> class Object {
> Data m_Data;
>
> Data&DoSomething() {
> // Do something
> return m_Data;
> }
> };
>
> Notice DoSomething has reference return type. Do you need to use
> reference return type? If yes, what is it used for?
It depends on the cases, sometimes you need it, sometimes you don't.
It's impossible to create objective absolute rules about all of this stuff.
In C++ there is a quite peculiar case, though: iostreams are (always?)
passed and returned by non-const reference. Somebody else will
articulate this point, eventually.
> Maybe, you want to suggest your code to explain why you need
> reference return type. Reference return type is dangerous unless you
> use return ‘this’ pointer.
The "dangerousness" of returning a reference is absolutely not related
to the fact of returning a reference to "*this".
The most dangerous case is when you return a reference (or a pointer) to
a local non static variable, which very likely amounts to looking for
trouble.
Further than that, all this discourse is too vague to be of any use.
Pick a practical non-abstract example and implement it as you find it
more correct, then we could discuss the various approaches.
--
FSC -
http://userscripts.org/scripts/show/59948
http://fscode.altervista.org -
http://sardinias.com