记第一天实训

1、先是Ubuntu主机连不上网,要把虚拟机设置里的桥接模式改为NAT模式。为了方便cv,安装了vmtools。

参考博客:Linux驯服之路(第二弹)——ubuntu配置vscode_ubuntu vscode-优快云博客

2、linux编译gcc,g++没有出问题,到vscode上有问题。后,面在linux上安装了mingw-w64,没有出现问题。

3、git上传文件不了,直到现在,也没有能够运行成功这行代码,这个解决指南也解决不了问题。(5 封私信 / 80 条消息) 解决 Git 连接时出现 Permission denied (publickey)的解决指南 - 知乎

ssh -T git@gitlab.com

但可以正常上传文件,用的是ssh秘钥,基本参考极狐上的文档。

7月13日编辑:是我ping错地方了,应该是ping下面这里。极狐的文档是针对整个gitlab的,可能我这个是比较特殊的。

ssh -T git@partner-gitlab.mioffice.cn

4、一些重点知识点的总结:

const在C++中的使用;cmake生成动态静态库;C++编译过程:生成obj的流程,obj里有什么;自己实现开源项目;C和C++的区别。

动态库,动态链接,静态库,静态链接;解释器和编译器的区别;

头文件相互包含,如何解决;

const关键字,static关键字

5、后面是作业中的coredump(linux手动生成core dump_主动触发应用coredump-优快云博客;linux下生成core dump文件方法及设置_允许进程生成codump-优快云博客【Linux下如何生成coredump文件】_coredump文件怎么生成-优快云博客;)

cmake的使用(【C++】Vscode 中使用CMakeLists(推荐)构建C++项目:项目结构、各个文件夹的作用、从编码到debug_vscode cmakelist-优快云博客库文件(动态库和静态库的制作,以及在Cmake中编译使用)_cmake 静态库-优快云博客;如何使用CMake制作并使用静态/动态库?_cmake 静态库-优快云博客一文掌握CMake构建静态库、动态库_vscode使用cmake生成静态库-优快云博客

CMake常用命令(六)link_libraries 和 target_link_libraries 链接库_cmake link libraries-优快云博客

6、这里是不需要做复制优化吗 #pragma once #include "B.h" #include <vector> using namespace std; vector<int> test(){ vector<int> v; return v; } void test2(){ vector<int> b = test(); }

这段代码确实涉及C++的复制优化(Copy Elision),不过现代编译器通常会自动处理,让我详细解释: ### 代码中的复制优化点 你提供的代码有两处潜在的复制操作: ```cpp vector<int> test(){ vector<int> v; return v; // 1. 返回局部对象时是否复制? } void test2(){ vector<int> b = test(); // 2. 函数返回值初始化变量时是否复制? } ``` ### 现代C++的优化机制 #### 1. **RVO(返回值优化)** 当函数返回一个**局部对象**时,编译器会直接在调用者的栈帧上构造该对象,避免复制操作。即使对象很大(如包含大量元素的vector),也不会产生复制成本。 #### 2. **NRVO(具名返回值优化)** 即使返回的是具名变量(如示例中的`v`),大多数编译器也会执行NRVO,直接在返回位置构造对象,不会调用拷贝构造函数。 #### 3. **移动语义** 如果编译器未执行RVO/NRVO,C++11引入的**移动语义**会自动接管: ```cpp return v; // 即使有复制,也会调用vector的移动构造函数(浅拷贝+资源转移) ``` 移动构造函数的成本远低于深拷贝,几乎可以忽略不计。 ### 代码是否需要手动优化? **不需要**。现代编译器(如GCC 5+、Clang 3.4+、MSVC 2015+)会自动应用RVO/NRVO,即使关闭优化选项(如`-O0`),也会优先使用移动语义。 ### 验证优化效果的方法 你可以通过以下方式验证: 1. **添加打印语句**: ```cpp #include <iostream> #include <vector> using namespace std; vector<int> test(){ vector<int> v(1000, 42); // 大vector cout << "v address: " << &v << endl; return v; } int main(){ vector<int> b = test(); cout << "b address: " << &b << endl; } ``` 如果RVO生效,`v`和`b`的地址会相同(在同一内存位置构造)。 2. **编译选项验证**: ```bash g++ -fno-elide-constructors test.cpp # 禁用复制优化,强制调用构造/析构函数 ``` 禁用优化后性能可能下降,但启用优化(如`-O2`)后,即使有复杂逻辑,现代编译器仍能有效优化。 ### 最佳实践建议 1. **保持代码简洁**:直接返回局部对象,依赖编译器优化。 2. **避免不必要的移动**: ```cpp return std::move(v); // 错误!会阻止RVO,强制使用移动语义 ``` 3. **使用移动语义的场景**: ```cpp vector<int> getVector() { vector<int> a = ...; vector<int> b = ...; return condition ? std::move(a) : std::move(b); // 当无法应用RVO时 } ``` ### 总结 你的代码已经是最优写法,现代编译器会自动处理复制优化,无需手动干预。保持代码清晰易懂比手动优化更重要。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值