Skip to content

Latest commit

 

History

History
71 lines (53 loc) · 2.75 KB

op_deref.md

File metadata and controls

71 lines (53 loc) · 2.75 KB

operator*

  • memory[meta header]
  • std[meta namespace]
  • unique_ptr[meta class]
  • function[meta id-type]
  • cpp11[meta cpp]
typename add_lvalue_reference<T>::type operator*() const; // (1) C++11
constexpr add_lvalue_reference_t<T> operator*() const;    // (1) C++23
  • add_lvalue_reference[link /reference/type_traits/add_lvalue_reference.md]
  • add_lvalue_reference_t[link /reference/type_traits/add_lvalue_reference.md]

概要

ポインタを間接参照する。

テンプレートパラメータ制約

  • C++26 : *declval<pointer>()が適格な式であること。
    • これにより、unique_ptr<void>のように間接参照できない型に対してこの演算子はオーバーロード解決から除外され、SFINAEフレンドリに振る舞う(テンプレートやコンセプトの制約チェックでハードエラーにならず、単に制約を満たさないものとして扱われる)。
  • C++26 : Tが配列型である場合、またはadd_lvalue_reference_t<T>が有効な型でない場合、プログラムは不適格となる。

要件

get() != nullptr
  • get()[link get.md]

戻り値

*get()

例

#include <iostream>
#include <memory>

int main()
{
  std::unique_ptr<int> p(new int(3));

  int& r = *p;
  std::cout << r << std::endl;
}

出力

3

バージョン

言語

  • C++11

処理系

  • GCC: 4.4.7 [mark verified]
  • Clang: 3.0 [mark verified]
  • Visual C++: 2010 [mark verified], 2012 [mark verified], 2013 [mark verified]

参照