← 返回首页
Redefined default parameter — CodeQL query help documentation CodeQL docs
CodeQL documentation
CodeQL resources

Redefined default parameter

ID: cpp/redefined-default-parameter Kind: problem Security severity: Severity: error Precision: high Tags: - maintainability - readability - external/jsf Query suites: - cpp-security-and-quality.qls

Click to see the query in the CodeQL repository

Inherited default parameters should not be redefined because this obscures the behavior of the code. Default values are statically bound and when they are redefined in dynamically bound function calls this reduces readability of the code, increasing the risk of introducing defects.

For example, while C++ dynamically binds virtual methods, the default parameters of those methods are statically bound. Hence, the draw() method of the derived type (Circle), if referenced through a base type pointer (Shape *), will be invoked with the default parameters of the base type (Shape).

enum Shape_color { red, green, blue }; class Shape { public: virtual void draw (Shape_color color = green) const; ... } class Circle : public Shape { public: virtual void draw (Shape_color color = red) const; ... } void fun() { Shape* sp; sp = new Circle; sp->draw (); // Invokes Circle::draw(green) even though the default } // parameter for Circle is red.

References