相关对象未被修改时应使用 const 声明
6.2.11 ID_nonConstUnmodified
用 const 显式区分数据是只读的还是可写的,细化数据的访问方式可显著提高可读性,并保护数据不被错误修改,有助于编译器优化。
下列情况应使用 const 声明:
- 不需要被修改的非参数对象应声明为常量对象
- 通过指针或引用访问对象但不修改对象时,应声明为常量指针或引用
- 成员函数访问非静态成员对象但不修改相关对象时,应声明为常量成员函数
示例:
double pi = 3.14; // Non-compliant
class Circle {
double r;
public:
Circle(double);
Circle(Circle&) = default; // Non-compliant
double area() { // Non-compliant
return pi * r * r;
}
};
例中 pi 未被修改,应作为常量;拷贝构造函数的参数未被修改,应声明为常量引用;成员函数 area 未修改成员对象,应声明为常量成员函数:
const double pi = 3.14; // Compliant
class Circle {
....
Circle(const Circle&) = default; // Compliant
double area() const { // Compliant
return pi * r * r;
}
};
相关
参考
C++ Core Guidelines Con.1
C++ Core Guidelines Con.2
C++ Core Guidelines Con.3
C++ Core Guidelines Con.4
MISRA C++ 2008 7-1-1
MISRA C++ 2008 7-1-2