C++学习-2023/12/13-C++函数上的改变

内联思想:提高效率

短小精悍
用inline修饰的函数
在结构体或者类型实现的函数,默认为内联函数

重载思想

C++允许同名不同参的函数存在
参数个数不同
参数类型不同
参数顺序不同(建立在存在不同类型)

const不构成重载

缺省思想:给函数形参初始化,达到不同形参的函数调用

缺省的顺序:必须的从右道左,连续缺省
缺省的时候,要避免存在普通函数,防止存在二义性

Lambda表达式:函数的定义并且返回一个函数指针,所以一般在C++中会结合auto使用

[捕获方式](函数参数)是否修改 是否存在异常->函数返回值类型{函数体;};
1.[]
2.[=]
3.[&]
4.[&,x, = ]
5.[this] 类中数据成员的捕获
函数参数: 自己写函数的时候的函数参数
能否修改:mutable
是否存在异常:throw() 不存在

#include 
inline int Max(int a, int b)
{
    return a > b ? a : b;
}
//缺省:不传入参数使用默认参数
void PrintValue(int a = 110, int b = 120)
{
    std::cout << a + b << "\n";
}
void PrintMax(int (*p)(int, int), int a, int b)
{
    std::cout << p(a,b) << "\n";
}

//QT强无敌,啥时候能摸摸
//Lambda表达式
void testLambda()
{
    //最完整的Lambda表达式
    int(*pMax)(int, int) = [](int a, int b)mutable throw()->int {return a > b ? a : b; };
    //一般用的时候怎么简单怎么来,结合auto+省略的Lambda表达式去使用
    auto p = [](int a, int b) {return a > b ? a : b; };
    std::cout << p(12345, 119) << "\n";
    //进阶一下:函数的定义和调用写在一起
    std::cout << [](int a, int b) {return a > b ? a : b; }(888,666) << "\n";

    PrintMax([](int a, int b) {return a + b; }, 6, 6);

    //捕获方式
    int num = 1;
    auto p1 = [=]() {std::cout << num << "\n"; };
    auto p2 = [&]() {std::cout << num << "\n"; };
    p1();
    p2();
    num = 1001;
    p1();
    p2();
}

int main()
{
    auto* p = Max;
    std::cout << p(1, 2) << "\n";

    PrintValue();
    //PrintValue(0);
    testLambda();
    std::cout << "Hello World!\n";
}

你可能感兴趣的:(c++)