主要内容

AUTOSAR C++14 Rule A7-1-1

R2026b

Constexpr or const specifiers shall be used for immutable data declaration

描述

Constexpr or const specifiers shall be used for immutable data declaration.

理由

声明变量 const 或 constexpr 可以降低您意外修改该变量的可能性。此外,编译器可以对 const 和 constexpr 变量执行各种优化,以提高运行时性能。

Polyspace 实现

检查项会对以下情况进行标记:

  • 未使用 const 进行限定但在函数体中从未被修改的函数参数或局部变量。

  • 未使用 const 进行限定但在其生命周期内指向同一位置的指针。

整数、浮点、枚举和布尔类型的函数参数不会被标记出来。

如果一个变量通过引用或指针传递给另一个函数,则检查项会假设该变量可能会被修改。这些变量不会被标记出来。

故障排除

如果您预期会出现违规,而 Polyspace® 未报告该违规,请参阅诊断为何编码规范违规未按预期显示。

示例

全部展开

#include <cstddef>
bool Status;
extern int setStatus(); //sets Status; returns -1 if fails

char getNthChar(const char* str, int N){ //noncompliant
	int index=0;
	int status = setStatus(); //noncompliant
	while(*(str+index)!='\0'){
		if(index==N)
			return *(str+N);
		++index;
	}
		
	return '\0';
}
char getNthChar_const_safe(const char* const str, int N){
	int index=0;
	const int status = setStatus();
	while(*(str+index)!='\0'){
		if(index==N)
			return *(str+N);
		++index;
	}
		
	return '\0';
}

在函数 getNthChar() 中,C 字符串 str 被传递为 const char* 参数,意味着字符串 *str 是 const。因为指针 str 不更改值,所以必须为该指针本身使用 const 进行限定,如函数 getNthChar_const_safe 中所示。Polyspace 会将参数 str 标记出来。

因为局部整数 status 在 getNthChar() 中并未被修改,因此必须将其声明为 const,如 getNthChar_const_safe 中所示。Polyspace 会将该声明标记出来。

检查信息

组:声明
类别:必需、自动
PQL 名称:std.autosar_cpp14.A7_1_1

版本历史记录

在 R2020b 中推出

全部展开