Movatterモバイル変換


[0]ホーム

URL:


cppreference.com
Namespaces
Variants
    Actions

      class property specifiers(since C++26)

      From cppreference.com
      <cpp‎ |language
       
       
      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
       
       

      Specifies that a class isreplaceable  (replaceable_if_eligible),trivially relocatable  (trivially_relocatable_if_eligible), or that a class cannot bederived from (final).

      Contents

      [edit]Syntax

      Class property specifiers appear at the beginning of the class definition, immediately after the name of the class, and cannot appear in a class declaration.

      class-keyattr (optional)class-head-nameclass-prop-specifier-seq (optional)base-clause (optional)
      class-prop-specifier-seq - one or moreclass-prop-specifier s, but each can appear at most once.
      class-prop-specifier - one offinal,replaceable_if_eligible andtrivially_relocatable_if_eligible.

      Before(C++26), there was theclass-virt-specifier (optional) in place ofclass-prop-specifier-seq (optional), which only allowed thefinal forfinal specifier(since C++11).

      [edit]Explanation

      final,replaceable_if_eligible andtrivially_relocatable_if_eligible are identifiers with a special meaning when used in a class head. In other contexts, it is not reserved and may be used to name objects and functions.

      [edit]final specifier

      final specifies that this class may not appear in thebase-specifier-list of another class definition (in other words, cannot be derived from). The program is ill-formed otherwise (a compile-time error is generated).final can also be used with aunion definition, in which case it has no effect (other than on the outcome ofstd::is_final)(since C++14), since unions cannot be derived from.

      [edit]replaceable_if_eligible specifier

      replaceable_if_eligible specifies that this class isreplaceable  if it iseligible for replacement .

      [edit]trivially_relocatable_if_eligible specifier

      trivially_relocatable_if_eligible specifies that this class istrivially relocatable  if it iseligible for trivial relocation .

      [edit]Replaceability

      A classC isreplaceable  if it iseligible for replacement  and either:

      [edit]Eligibility for replacement

      A classC iseligible for replacement  unless either:

      [edit]Trivial relocatability

      A class istrivially relocatable  if it iseligible for trivial relocation  and either:

      [edit]Eligibility for trivial relocation

      A class iseligible for trivial relocation  unless it has either:

      except that it is implementation-defined whether an otherwise-eligibleunion having one or more subobjects of polymorphic class type iseligible for trivial relocation .

      [edit]Default movability

      A classC isdefault movable  if all following conditions are met:

      • overload resolution fordirect-initializing an object of typeC from anxvalue of typeC selects a constructor that is a direct member ofC and is neither user-provided nor deleted
      • overload resolution for assigning to anlvalue of typeC from anxvalue of typeC selects an assignment operator function that is a direct member ofC and is neither user-provided nor deleted
      • C has adestructor that is neither user-provided nor deleted.

      [edit]Keywords

      final,replaceable_if_eligible,trivially_relocatable_if_eligible.

      [edit]Note

      Feature-test macroValueStdFeature
      __cpp_trivial_relocatability202502L(C++26)Trivial relocatability

      [edit]Example

      Run this code
      struct final;// OK; declares a class named 'final',// does not use class property specifiers.struct IF final;// Ill-formed: class property specifiers// cannot appear at function declaration.struct F final{};// OK; specifier marks class F as non-derivable.struct D: F{};// Ill-formed: class F cannot be derived from. // OK; specifier marks class R as 𝘳𝘦𝘱𝘭𝘢𝘤𝘦𝘢𝘣𝘭𝘦 if eligible.struct R replaceable_if_eligible{}; // OK; specifier marks class T as 𝘵𝘳𝘪𝘷𝘪𝘢𝘭𝘭𝘺 𝘳𝘦𝘭𝘰𝘤𝘢𝘵𝘢𝘣𝘭𝘦 if eligible.struct T trivially_relocatable_if_eligible{}; // OK; a class can be marked with multiple class property specifiers.struct FRT final replaceable_if_eligible trivially_relocatable_if_eligible{}; // Ill-formed: each class property specifier can appear at most once.struct FRF final replaceable_if_eligible final{}; int main(){}

      [edit]References

      • C++26 standard (ISO/IEC 14882:2026):
      • 6.8.1 Trivially relocatable and replaceable types [basic.types.general]

      [edit]See also

      final specifier(C++11) declares that a method cannot be overridden or a class be derived from[edit]
      (C++14)
      checks if a type is a final class type
      (class template)[edit]
      Retrieved from "https://en.cppreference.com/mwiki/index.php?title=cpp/language/class_property_specifiers&oldid=182328"

      [8]ページ先頭

      ©2009-2025 Movatter.jp