小编cyp*_*ist的帖子

clang-tidy 建议我删除 const 引用,为什么?

我在一个项目树上运行了 clang-tidy(“现代化”模块),我一直在努力使 C++17 保持合理的最新状态。它纠正的几乎所有内容对我来说都不足为奇,除了一件事:它改变了所有这些类型的结构:

void foo(const std::string& str) {
}
Run Code Online (Sandbox Code Playgroud)

..对此:

void foo(std::string str) {
}
Run Code Online (Sandbox Code Playgroud)

我不明白为什么。在我未经训练的眼睛看来,这意味着两件事:

  1. 它需要复制对象而不是仅仅传递引用。(尽管我假设在某些情况下,编译器可以推断出它在生成代码时可以只传递一个指针——但引用使其明确(恕我直言更好))。
  2. const 用于告诉函数体开发人员它不应该更改输入字符串,并且如果需要修改字符串,则需要将其自己的副本存储在某处。

不过,我确实看到了一个好处——通过将一个对象作为const引用传递,它只是一个“删除常量”,无论如何都不会被改变,所以我想通过值传递可以解决这个问题。

为什么它建议删除带有非常量传递值的常量引用?

c++ c++17 clang-tidy

6
推荐指数
1
解决办法
533
查看次数

维护 git 存储库的克隆

我想在(自托管)bitbucket 服务器中克隆 github 存储库,并不时从 github 存储库中提取最新更改。在我们的克隆中,我们将做一些永远不会离开我们的存储库的实验性内容。

为了显示; 对于fossil,我会确保我们的存储库和他们的存储库具有相同的项目ID,我会这样做:

$ cd ~/checkout/prjdir
$ fossil pull https://their.org/prj/foo --once
Run Code Online (Sandbox Code Playgroud)

这将获得所有最新的签入、分支、标签等。然后将其推送到我们组织的服务器:

$ fossil push
Run Code Online (Sandbox Code Playgroud)

永远不会有任何冲突;我们的更改将在实验分支上进行,因此从上游更新时无需任何合并。

我尝试复制化石工作流程并复制/粘贴一些似乎相关的内容,并为初始克隆提出以下建议:

$ git clone https://github.com/foo/bar.git
$ cd bar
$ git remote set-url origin https://ourbitbucket.org/foo/bar.git
$ git push -u origin master
Run Code Online (Sandbox Code Playgroud)

然而,这似乎并没有带来标签(标签对我们很重要)。

使用 git(github 作为上游,我们的 bitbucket 服务器用于我们自己的标签/分支):

  1. 如何制作存储库的完整克隆(包括所有分支和标签)?
  2. 一旦我有一个克隆的存储库,我如何从上游(在 github 上)提取所有最新的更改(包括分支、标签)并将它们推送到我们的服务器(bitbucket)?

git clone fossil

4
推荐指数
1
解决办法
557
查看次数

标签 统计

c++ ×1

c++17 ×1

clang-tidy ×1

clone ×1

fossil ×1

git ×1