Namespaces
Variants

class property specifiers (since C++26)

From cppreference.net
C++ language
General topics
Flow control
Conditional execution statements
Iteration statements (loops)
Jump statements
Functions
Function declaration
Lambda function expression
inline specifier
Dynamic exception specifications ( until C++17* )
noexcept specifier (C++11)
Exceptions
Namespaces
Types
Specifiers
constexpr (C++11)
consteval (C++20)
constinit (C++20)
Storage duration specifiers
Initialization
Expressions
Alternative representations
Literals
Boolean - Integer - Floating-point
Character - String - nullptr (C++11)
User-defined (C++11)
Utilities
Attributes (C++11)
Types
typedef declaration
Type alias declaration (C++11)
Casts
Memory allocation
Classes
Class-specific function properties
Special member functions
Templates
Miscellaneous

Gibt an, dass eine Klasse ersetzbar  ist ( replaceable_if_eligible ), trivial verschiebbar  ist ( trivially_relocatable_if_eligible ), oder dass von einer Klasse nicht abgeleitet werden kann ( final ).

Inhaltsverzeichnis

Syntax

Klasseneigenschafts-Spezifizierer erscheinen am Anfang der Klassendefinition, unmittelbar nach dem Namen der Klasse, und können nicht in einer Klassendeklaration erscheinen.

class-key attr  (optional) class-head-name class-prop-specifier-seq  (optional) base-clause  (optional)
class-prop-specifier-seq - ein oder mehrere class-prop-specifier s, aber jeder kann höchstens einmal vorkommen.
class-prop-specifier - einer von final , replaceable_if_eligible und trivially_relocatable_if_eligible .

Vor (C++26) gab es den class-virt-specifier  (optional) anstelle von class-prop-specifier-seq  (optional) , der nur final für den final specifier (since C++11) erlaubte.

Erklärung

final , replaceable_if_eligible und trivially_relocatable_if_eligible sind Bezeichner mit einer speziellen Bedeutung, wenn sie im Klassenkopf verwendet werden. In anderen Kontexten sind sie nicht reserviert und können zur Benennung von Objekten und Funktionen verwendet werden.

final Spezifizierer

final spezifiziert, dass diese Klasse nicht in der base-specifier-list einer anderen Klassendefinition erscheinen darf (mit anderen Worten, kann nicht abgeleitet werden). Das Programm ist andernfalls fehlerhaft (es wird ein Compile-Time-Fehler generiert). final kann auch mit einer union -Definition verwendet werden, in welchem Fall es keine Auswirkung hat (außer auf das Ergebnis von std::is_final ) (seit C++14) , da von Unions nicht abgeleitet werden kann.

replaceable_if_eligible Spezifizierer

replaceable_if_eligible spezifiziert, dass diese Klasse ersetzbar  ist, falls sie für Ersetzung geeignet  ist.

trivially_relocatable_if_eligible Spezifizierer

trivially_relocatable_if_eligible spezifiziert, dass diese Klasse trivial relokierbar  ist, falls sie für triviale Relokation geeignet  ist.

Austauschbarkeit

Eine Klasse C ist austauschbar  , wenn sie für Austausch geeignet  ist und entweder:

Berechtigung für Ersatz

Eine Klasse C ist ersetzbar es sei denn, einer der folgenden Fälle trifft zu:

Triviale Relokationsfähigkeit

Eine Klasse ist trivially relocatable  wenn sie eligible for trivial relocation  ist und entweder:

Berechtigung für triviale Verlagerung

Eine Klasse ist für triviale Verschiebung geeignet  es sei denn, sie hat entweder:

außer dass implementierungsdefiniert ist, ob eine ansonsten geeignete union mit einem oder mehreren Unterobjekten polymorphen Klassentyps für triviale Relokation geeignet ist .

Standardmäßige Beweglichkeit

Eine Klasse C ist default movable  , wenn alle folgenden Bedingungen erfüllt sind:

  • Überladungsauflösung für direkte Initialisierung eines Objekts vom Typ C aus einem X-Wert vom Typ C wählt einen Konstruktor aus, der ein direktes Mitglied von C ist und weder benutzerbereitgestellt noch gelöscht ist
  • Überladungsauflösung für die Zuweisung an einen L-Wert vom Typ C von einem X-Wert vom Typ C wählt eine Zuweisungsoperatorfunktion aus, die ein direktes Mitglied von C ist und weder benutzerbereitgestellt noch gelöscht ist
  • C hat einen Destruktor der weder benutzerbereitgestellt noch gelöscht ist.

Schlüsselwörter

final , replaceable_if_eligible , trivially_relocatable_if_eligible .

Hinweis

Feature-Test-Makro Wert Std Feature
__cpp_trivial_relocatability 202502L (C++26) Triviale Relokalisierbarkeit

Beispiel

struct final;      // OK; deklariert eine Klasse namens 'final',
                   // verwendet keine Klassen-Eigenschafts-Spezifizierer.
struct IF final;   // Ungültig: Klassen-Eigenschafts-Spezifizierer
                   // können nicht in Funktionsdeklarationen erscheinen.
struct F final {}; // OK; Spezifizierer markiert Klasse F als nicht ableitbar.
struct D: F {};    // Ungültig: Von Klasse F kann nicht abgeleitet werden.
// OK; Spezifizierer markiert Klasse R als 𝘦𝘳𝘴𝘦𝘵𝘻𝘣𝘢𝘳 falls geeignet.
struct R replaceable_if_eligible {};
// OK; Spezifizierer markiert Klasse T als 𝘵𝘳𝘪𝘷𝘪𝘢𝘭 𝘷𝘦𝘳𝘭𝘢𝘨𝘦𝘳𝘣𝘢𝘳 falls geeignet.
struct T trivially_relocatable_if_eligible {};
// OK; eine Klasse kann mit mehreren Klassen-Eigenschafts-Spezifizierern markiert werden.
struct FRT final replaceable_if_eligible trivially_relocatable_if_eligible {};
// Ungültig: jeder Klassen-Eigenschafts-Spezifizierer kann höchstens einmal erscheinen.
struct FRF final replaceable_if_eligible final {};
int main() {}

Referenzen

  • C++26-Standard (ISO/IEC 14882:2026):
  • 6.8.1 Trivial relocatable und ersetzbare Typen [basic.types.general]

Siehe auch

final Spezifizierer (C++11) deklariert, dass eine Methode nicht überschrieben oder eine Klasse nicht abgeleitet werden kann
(C++14)
prüft, ob ein Typ ein finaler Klassentyp ist
(Klassentemplate)