现代C++实战(5)

这一期主要讲一些工具和库,感觉不是很重要,随便看看就行

编译器

  • MSVC
  • Clang
  • GCC

格式化工具:clang-format

代码检查工具:clang-tidy

排错工具:Valgrind、nvwa::debug_new,这俩可以检测内存泄露

处理数据类型变化和错误

optional

optional是专门用于处理空值的对象,optional对对象进行包装,让对象有了一个空值。

optional常用于函数的返回值

// 构造optional对象
make_optional(para);

opt.has_value(); // 判断是否有值
opt.value();	// 返回option的值,如果是nullopt就抛出异常
opt.value_or(para); // 如果option是空,则返回para,否则返回option保存的值

variant

optional的缺点在于,它只能保存两种状态,要么有值,要么是nullopt。variant可以保存多种类型的值

可看成是一种特殊的union

template<class... Types>
class variant;

int main() {
    variant<int, double, bool> a; // 模板参数不能相同
    a = 1;
    a = 1.;
    a = true;
    get<int> a;	// 1
    get<double> a; // 1.
    get<bool> a; // true
}

一些库

数学计算

Armadillo

但在图形学中,更常用的是glm和eigen3,他们都包含了矩阵运算什么的

Boost

Boost算C++非常著名的库了,很多标准库的东西都是boost里面拿过来的。

单元测试

Boost.Test

Catch2

日志库

Easylogging

spdlog

网络库

我个人喜欢asio,但那个是传输层的库

C++ REST SDK是个http库

posted @ 2022-08-12 15:34  Destiny233  阅读(66)  评论(0)    收藏  举报