现代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库