Movatterモバイル変換


[0]ホーム

URL:


cppreference.com
Namespaces
Variants
    Actions

      C++ named requirements:CopyConstructible

      From cppreference.com
      <cpp‎ |named req
       
       
      C++ named requirements
       

      Specifies that an instance of the type can be copy-constructed from anlvalue expression.

      Contents

      [edit]Requirements

      The typeT satisfiesCopyConstructible if

      Given

      • v, anlvalue expression of typeT orconst T or anrvalue expression of typeconst T,
      • u, an arbitrary identifier.

      The following expressions must be valid and have their specified effects:

      ExpressionPost-conditions
      T u= v;The value ofu is equivalent to the value ofv.

      The value ofv is unchanged.

      T(v)The value ofT(v) is equivalent to the value ofv.

      The value ofv is unchanged.

      The expressionv.~T() also must be valid, and, for lvaluev, the expression&v must have the typeT* orconst T* and must evaluate to the address ofv.

      (until C++11)

      [edit]Notes

      Until C++11, classes that overloadedoperator& were notCopyConstructible and thus were not usable in thestandard library containers. This is a design decision in C++98 (instead of a defect, seeLWG issue 390).

      Since C++11, the standard library usesstd::addressof whenever the address of an object is needed.

      Extended content

      Being aCopyConstructible class impliesstd::is_copy_constructible but not vice versa sincestd::is_copy_constructible will only check for the ability to call the constructor with the correct arguments, and, e.g., not aMoveConstructible requirement.

      Run this code
      #include <type_traits>#include <utility> struct S{    S()=default;    S(S&&)= delete;    S(const S&)=default;};static_assert(std::is_copy_constructible_v<S>); int main(){    S s1; // Class `S` doesn't satisfy MoveConstructible requirement,// hence doesn't satisfy CopyConstructible requirement[[maybe_unused]] S s2{std::move(s1)};// ill-formed, use of deleted function}

      [edit]References

      Extended content
      • C++23 standard (ISO/IEC 14882:2024):
      • 16.4.4.2 Template argument requirements [utility.arg.requirements]

      [edit]See also

      checks if a type has a copy constructor
      (class template)[edit]
      specifies that an object of a type can be copy constructed and move constructed
      (concept)[edit]
      Retrieved from "https://en.cppreference.com/mwiki/index.php?title=cpp/named_req/CopyConstructible&oldid=170058"

      [8]ページ先頭

      ©2009-2025 Movatter.jp