zoukankan      html  css  js  c++  java
  • Cpp Chapter 8: Adventures in Functions Part2

    ) You can't pass an expression to a function that requires a reference:

    double refcube(double &ra);
    double x = 3.0;
    refcube(x); // valid
    refcube(x + 3.0) // invalid because x + 3.0 is not a variable

    ) Passing by value is a norm that you might not want to change the origin value while doing calculations(e.g. calculating the square of a number). If you insist on using a reference while not changing the original value, use const in function prototype and header:

    double refcube(const double &ra)

    ) Better use const reference arguments because const reference allows the function to handle both const and non-const data, However, non-const reference could only handle non-const data.

    ) Using references with a structure(most intended):

    struct thing
    {
    ...
    };
    
    void process(thing & rt); // accept struct as reference
    void process(const thing & rt); // accept struct as const reference

    You could also make a function return a reference to structure, this makes the return process easier, without copying the entire structure again:

    struct thing
    {
    ...
    };
    
    const thing & process(const thing & rt); // return a const struct reference
    const thing & accumulate(thing & target, const thing & addition);
    thing a, b, c, total;
    total = accumulate(accumulate(a, b), c);
    // return struct reference makes it possible to nest accumulate() function
    // also make it easier for the return value to go straight to total
    // instead of copy the entire structure again

    Also avoid returning references to temporary structures which are declared inside a function(also better const reference).

    const string & version(string & s1, const string & s2);
    
    const string & version(string & s1, const string & s2)
    {
        string temp; // local variable
        temp = s2 + s1 + s2;
        return temp; // Don't return reference to local variables!!!!!
    }
  • 相关阅读:
    设计模式13---设计模式之观察者模式(Observer)(行为型)
    codeforces 166C Median
    HDU 1176 免费馅饼
    老鸟的Python新手教程
    setsockopt()使用方法(參数具体说明)
    RelativeLayout经常使用属性介绍
    java多线程模拟生产者消费者问题,公司面试常常问的题。。。
    JAVA实现HTTPserver端
    进程间通信_03命名管道
    expdp&impdp
  • 原文地址:https://www.cnblogs.com/fsbblogs/p/9693116.html
Copyright © 2011-2022 走看看