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