Main Content

MISRA C++:2008 Rule 9-3-1

const member functions shall not return non-const pointers or references to class-data

Description

Rule Definition

const member functions shall not return non-const pointers or references to class-data.

Rationale

A const object cannot be changed post initialization and can only invoke class member functions that are also declared as const. These member functions are not expected to change the state of the object.

If a const member function returns a non-const pointer or reference to a data member of the class, the function can modify the state of an object and violate developer expectations. To avoid this situation, when you define a const member function that returns a reference or a pointer to a class data member, specify the return type as const.

Polyspace Implementation

Polyspace® flags a violation of this rule only if a const member function returns a non-const pointer or reference to a non-static data member. The rule does not apply to static data members.

Troubleshooting

If you expect a rule violation but Polyspace does not report it, see Diagnose Why Coding Standard Violations Do Not Appear as Expected.

Examples

expand all

class A{
	
	private:
	
	int& rInt;
	public:
	
	int* getR() const{ //Noncompliant
		return &rInt;
	}
	
	const int* getConstR() const{ //Compliant
		return &rInt;
	}
};

In this example:

  • The const member function getR() returns a non-const pointer and violates the rule.

  • The const member function getConstR() returns a const pointer and is compliant with the rule.

Check Information

Group: Classes
Category: Required

Version History

Introduced in R2013b