Warnung C26434
Die Funktion "derived::function" blendet eine nicht virtuelle Funktion "base::function" (c.128) aus.
C++ Core Guidelines
Hinweise
Wenn Sie eine Funktion einführen, die denselben Namen wie eine nicht virtuelle Funktion in einer Basisklasse aufweist, erhalten Sie möglicherweise unerwartetes Verhalten. Es ist wie die Einführung eines Variablennamens, der mit einem Namen aus einem äußeren Bereich in Konflikt kommt. Sie können z. B. eine Basisklassenfunktion außer Kraft setzen. Wenn die Signaturen der Funktionen nicht übereinstimmen, kann die von Ihnen beabsichtigte Außerkraftsetzung stattdessen zu einer Überladung werden. Im Allgemeinen ist das Ausblenden von Namen gefährlich und fehleranfällig.
Überprüfen Sie in den Kernrichtlinien Folgendes:
- Es werden nur nicht außerkraftsetzungsfunktionen in der aktuellen Klasse überprüft.
- Es werden nur nicht virtuelle Funktionen von Basisklassen berücksichtigt.
- Es wird kein Signaturabgleich ausgeführt. Warnungen werden ausgegeben, wenn nicht qualifizierte Namen übereinstimmen.
Beispiel
In diesem Beispiel wird veranschaulicht, wie eine abgeleitete Klasse nicht virtuelle Funktionen ausblenden kann und wie virtuelle Funktionen sowohl Überladungen als auch Außerkraftsetzungen zulassen:
// C26434.cpp
struct Base
{
virtual ~Base() = default;
virtual void is_virtual() noexcept {}
void not_virtual() noexcept {}
};
struct Derived : Base
{
void is_virtual() noexcept override {} // Okay, override existing function
virtual void is_virtual(int i) noexcept {} // Add a virtual overload for function
void not_virtual() noexcept {} // C26434, hides a non-virtual function
virtual void not_virtual(int i) noexcept {} // C26434, and parameters ignored
};
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für