美文网首页
C++ 函数

C++ 函数

作者: affyzh | 来源:发表于2020-03-10 17:41 被阅读0次

    函数参数

    调用类型 描述
    传值调用 该方法把参数的实际值复制给函数的形式参数。在这种情况下,修改函数内的形式参数对实际参数没有影响。
    指针调用 该方法把参数的地址复制给形式参数。在函数内,该地址用于访问调用中要用到的实际参数。这意味着,修改形式参数会影响实际参数。
    引用调用 该方法把参数的引用复制给形式参数。在函数内,该引用用于访问调用中要用到的实际参数。这意味着,修改形式参数会影响实际参数。

    Lambda 函数与表达式

    C++11 提供了对匿名函数的支持,称为Lambda 函数(也叫 Lambda表达式)。

    Lambda表达式把函数看作对象。Lambda表达式可以像对象一样使用,比如可以将它们赋给变量和作为参数传递,还可以像函数一样对其求值。
    Lambda表达式本质上与函数声明非常类似。Lambda 表达式具体形式如下:

    [capture](parameters)->return-type{body}
    

    例如:

    [](int x, int y){ return x < y ; }
    

    如果没有返回值可以表示为:

    [capture](parameters){body}
    

    例如:

    []{ ++global_x; } 
    

    在一个更为复杂的例子中,返回类型可以被明确的指定如下:

    [](int x, int y) -> int { int z = x + y; return z + x; }
    

    本例中,一个临时的参数 z 被创建用来存储中间结果。如同一般的函数,z的值不会保留到下一次该不具名函数再次被调用时。
    如果Lambda 函数 没有传回值(例如 void),其返回类型可被完全忽略。
    Lambda表达式内可以访问当前作用域的变量,这是Lambda表达式的闭包(Closure)行为。 与JavaScript闭包不同,C++变量传递有传值和传引用的区别。可以通过前面的[]来指定:

    []      // 沒有定义任何变量。使用未定义变量会引发错误。
    [x, &y] // x以传值方式传入(默认),y以引用方式传入。
    [&]     // 任何被使用到的外部变量都隐式地以引用方式加以引用。
    [=]     // 任何被使用到的外部变量都隐式地以传值方式加以引用。
    [&, x]  // x显式地以传值方式加以引用。其余变量以引用方式加以引用。
    [=, &z] // z显式地以引用方式加以引用。其余变量以传值方式加以引用。
    

    另外有一点需要注意。对于[=][&]的形式,Lambda 表达式可以直接使用 this 指针。但是,对于[]的形式,如果要使用this指针,必须显式传入:

    [this]() { this->someFunc(); }();
    

    相关文章

      网友评论

          本文标题:C++ 函数

          本文链接:https://www.haomeiwen.com/subject/nlrgdhtx.html