- [[maybe_unused]] 是 C++11 及之后版本中的一个属性,用于抑制编译器关于未使用实体(变量、函数等)的警告。它告诉编译器,如果实体未被使用,那也是可以接受的,因此不会为此生成警告。[[maybe_unused]] 只能用于函数参数、变量、函数或类型定义,不能用于函数内部的变量定义。这个属性告诉编译器,某个实体可能会未被使用,但是仍然保留它,以防止警告。在函数内部定义的变量如果未被使用,应该通过其他方式解决,比如将其移至不使用的代码块之外,而不是使用 [[maybe_unused]] 属性。
std::scoped_lock
是 C++11 引入的一个锁定多个互斥量的 RAII(资源获取即初始化)风格的类。在构造函数中,它会锁定提供的一个或多个互斥量,并在析构函数中释放这些锁,从而确保在退出作用域时自动释放锁,防止死锁和资源泄漏。
std::scoped_lock lock(mutex_);
这行代码的作用是创建一个scoped_lock
对象lock
,并使用mutex_
互斥量进行初始化。这样做会锁定mutex_
,并在lock
对象超出其作用域时自动释放该锁。这样可以确保在lock
对象的作用域内,mutex_
互斥量被锁定,防止其他线程访问临界区,从而保护临界区中的共享资源。
用于将角度值规范化为 [0,2π) 的范围内,以确保结果在一个固定的范围内。规范化可以通过对结果取模的方式完成。
inline double normalizeRadian(const double rad, const double min_rad = -pi)
{const auto max_rad = min_rad + 2 * pi;const auto value = std::fmod(rad, 2 * pi);if (min_rad <= value && value < max_rad) {return value;}return value - std::copysign(2 * pi, value);
}