1.git 总结, 2.lambda function

本文档详细介绍了Git的基础操作流程,包括项目初始化、提交更新、项目更新等步骤,并提供了常见错误处理方法。此外,还深入探讨了C++中的Lambda表达式,通过实例演示了其使用方式和特性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.git 总结

版本本
git version 2.16.1.windows.1

提交更新:
1.git add -u
2.git commit -m "1"
3.git push

项目更新
1.git pull

第一次上传项目
1.git init
2.git add .
3.git commit -m "first use"
4.git remote add origin git@xx.git
5.git push origin master

第一次下载项目
1.mkdir fastfdmain
2.git init
3.git pull git@xx.git

备注:
| git add -A delete+change+new
| git add -u delete+change
| git add .  delete+change+new
| git reset  撤销项目对本地库的提交,如 git add
| git status 查看当前是否有文件更新
| 所有新增的文件都需要专门单独上传

报错:

Q1.遇到error: failed to push some refs to

A1.git pull origin master

Q2.A1报错refusing to merge unrelated histories

A2.强行合并git pull origin master –allow-unrelated-histories

Q3.如何Git Pull While Ignoring Local Changes?

A3.     git reset --hard

          git pull

Q4.如何删除orgin

A4.git remote rm origin

Q5.如何查看文件的修改行数

A5.     有时候想知道提交的代码修改了哪些文件,以及新增和删除的代码行数

          git 命令: git log --stat

2.lambda function

    /*
[capture](parameters) mutable ->return-type{statement}
*/
    int *x = 0;
    p = 4;
    int a = 1;
    double b = 2;
    auto func = [&, a, xx](const int &c)mutable ->int {x = new int(9); xx += 4; return xx;};
    int xx = 0;
    qDebug() << "func: "<<[&, a, xx](const int &c)mutable ->int {x = new int(9); xx += 4; return xx;}(5);
    qDebug() << "func: "<<[&, a, xx](const int &c)mutable ->int {x = new int(9); xx += 4; return xx;}(5);
    qDebug() << "func: "<<a << b << p << *x;
    qDebug() << xx;

    //& 必须在第一位
    //= 必须在第一位
    //[b] b为readonly
    //[this] this->p = 3是允许的
    //传指针时,指针是readonly但是,指针对应的值可以直接修改
    //传指针的引用,传值是一个道理
    //[&, a] 都是引用,除了a
    //[&, a, xx]xx必须在lambda函数的前面
    //lambda函数func中,第一声明时的参数, a,xx只会赋值一次, 例如func中的a永远是1

    // class A { public: A(){} void aa()const{val = 5;} int val;};

//lambda函数,和对象的成员变量,常函数,很像,mutable 类似 A类里, void aa() const {val = 5;} (wrong!) -> void aa() {val = 5;}
    //同时mutable后修改的非引用变量会一直保存在lambda函数里
    /*这种用法也是支持的
    qDebug() << "func: "<<[&, a, xx](const int &c)mutable ->int {x = new int(9); xx += 4; return xx;}(5);
    qDebug() << "func: "<<[&, a, xx](const int &c)mutable ->int {x = new int(9); xx += 4; return xx;}(5);
*/


//类变量:member
    int var = 1;
    int sqr = 2;
    QtConcurrent::run([]            (){qDebug() << __LINE__                            ;});//无
    QtConcurrent::run([=]           (){qDebug() << __LINE__ << member << var << "hello";});//类变量、局部变量
    QtConcurrent::run([=, &sqr]     (){qDebug() << __LINE__ << sqr    << var << "hello";});//同上+sqr的引用
    QtConcurrent::run([this]        (){qDebug() << __LINE__ << member        << "hello";});//类变量
    QtConcurrent::run([this, var]   (){qDebug() << __LINE__ << member << var << "hello";});//同上+var
    QtConcurrent::run([this, &var]  (){qDebug() << __LINE__ << member << var << "hello";});//同上+var的引用
    QtConcurrent::run([&]           (){qDebug() << __LINE__ << member << var << "hello";});//类变量、局部变量的引用
    QtConcurrent::run([&, var]      (){qDebug() << __LINE__ << member << var << "hello";});//同上、var变为值传递
    QtConcurrent::run([var]         (){qDebug() << __LINE__           << var << "hello";});//仅var
    QtConcurrent::run([var, sqr]    (){qDebug() << __LINE__ << sqr    << var << "hello";});//仅var、sqr
    QtConcurrent::run([var, &sqr]   (){qDebug() << __LINE__ << sqr    << var << "hello";});//仅var、sql的引用

    //线程调用函数【引用】注意:,{}的作用域内,若传入的是局部变量的引用,线程运行时,变量无法找到原始值而无法赋值的情况
    //线程调用函数,也会对类变量修改
    //其实最安全的还是[]和[var, sqr]之类的

2021-01-08

匿名函数的另外一种用法,可以缓存信号的传值

    timer = new QTimer(this);
    connect(timer, &QTimer::timeout, this, &MainWindow::slot_lambdaRandom);
    timer->start(1000);
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::on_pushButton_explode_clicked()
{
    timer->stop();
    emit signal_explode();
}

void MainWindow::slot_lambdaRandom()
{
    randomCount ++;
    int r = QRandomGenerator::global()->generate() % 1000;
    int index = randomCount;
    //lambda函数保存r和index这两个值
    auto funRandomSaver = [r, index](){
        qDebug() << QString("%1/%2:%3").arg(index).arg(randomCount).arg(r);
    };
    connect(this, &MainWindow::signal_explode, funRandomSaver);

    qDebug() << "count" << randomCount;
}

输出结果:

count 10
"1/10:105"
"2/10:757"
"3/10:746"
"4/10:493"
"5/10:425"
"6/10:836"
"7/10:790"
"8/10:492"
"9/10:531"
"10/10:619"

2024-11-29 lambda函数是对象

        auto f = [=] () mutable -> int {var++;return var;};
        qDebug() << f();//result 6
        qDebug() << f();//result 7
        qDebug() << [=] () mutable -> int {var++;return var;}();//result 6
        qDebug() << [=] () mutable -> int {var++;return var;}();//result 6

        qDebug() << "f is object" << std::is_object<decltype(f)>::value;
        qDebug() << "f is object" << std::is_function<decltype(f)>::value;

lambda函数,即匿名函数,即无名对象

上述可看成

        struct Func {operator int() const {var ++; return var;} mutable int var = 5; };
        Func f;
        qDebug() << f.operator int();//result 6
        qDebug() << f.operator int();//result 7
        qDebug() << Func().operator int();//result 6
        qDebug() << Func().operator int();//result 6

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值