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!!!!!
    }
  • 相关阅读:
    Git 标签管理
    Git 分支管理
    HTTP 400 错误 编译器错误消息: CS0016
    使用DOS指修改文件名
    跨服务器连接数据库
    SharePoint 2013 页面访问,Url中间多一段"_layouts/15/start.aspx#"
    SharePoint 2013 搜索高级配置
    sharepoint 2013 创建母版页
    SharePoint 2013上传AI格式文件,再次下载后变成了PS格式文件
    SharePoint 2013 配置启用搜索服务
  • 原文地址:https://www.cnblogs.com/fsbblogs/p/9693116.html
Copyright © 2011-2022 走看看