0%

近期开发C++的经验分享

我从去年末开始参与 Windows C++客户端的开发工作,几个月下来,总体上体验还是比较优秀的。

使用现代 C++语言标准

自 C++11 标准推出以来,现代 C++ 标准已发展到 C++20。许多新特性和标准库改进极大地提升了开发体验、代码简洁性和程序安全性。例如:

  • 自动类型推导 (auto) 减少了复杂类型声明的代码;
  • 智能指针降低了内存安全问题的风险;
  • 函数对象和 lambda 表达式带来了类函数式编程的体验;
  • thread、range 等许多实用的标准库;

合理使用设计模式

作为典型的面向对象语言,在 C++中适当地使用设计模式有助于编写可重用、可维护和可扩展的代码。比较有用的设计模式有:单例模式、工厂模式和抽象工厂模式、建造者模式、策略模式、命令模式等。

值得注意的是,许多设计模式需要区分接口类和实现类。通常在 C++ 中,通过声明一个 virtual 的虚构函数来定义一个抽象基类。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <iostream>
#include <memory>
#include <string>
#include <sstream>

class IDisplay {
public:
virtual std::string toString() = 0;
virtual ~IDisplay() {}
};

class Message : public IDisplay {
public:
std::string content;
Message(std::string content) : content(content) {}
std::string toString() override {
std::ostringstream os;
os << "Message(" << content << ")";
return os.str();
}
};

int main() {
std::unique_ptr<IDisplay> obj = std::make_unique<Message>("ok");
std::cout << obj->toString() << std::endl;
return 0;
}

使用 vcpkg 进行依赖管理

无论是在 Linux 还是 Windows 上,C++ 第三方库的依赖管理都是一个难题。幸运的是,微软推出了跨平台的 C++ 依赖管理工具 vcpkg(适用于 CMake 和 MSBuild),极大地简化了依赖声明与管理工作。

Visual Studio 与 VS Code 对比

作为全宇宙第一 IDE,Visual Studio 为 C++开发提供了许多开箱即用的工具和配置,只是缺乏一些个性化设置的选项,插件安装也比较繁琐。并且作为一个资深 GUI IDE,终端功能没有很完善。

相比之下,VS Code 支持广泛的个性化配置,终端体验也优于 Visual Studio。配合 C/C++ Extension Pack 和 CMake Tools 扩展后,开发 C++ 的体验也相当不错。不过,VS Code 的调试功能不如 Visual Studio,查看定义、重构等代码操作的功能和性能也有一定局限。

仍然存在的痛点

  • C++ 的编译速度仍然较慢(在 Visual Studio 中可以通过编译缓存等进行优化,但我尚未尝试)。
  • C++ 的字符串类型较为分散,Windows API 中许多接口使用宽字符串(wide string),经常需要与普通字符串(string)进行类型转换。
  • C++ 的运行时多态依赖虚拟基类指针,代码相对繁琐,并且存在一定的性能损失(一般情况下可以忽略不计)。
扫码加入技术交流群🖱️
QR code