Outils pour utilisateurs

Outils du site


lang:cpp:optional

{} ou std::nullopt

C'est la même chose.

#include <cassert>
#include <optional>
 
struct Version {
  Version() {}
  uint32_t major = 0;
  uint32_t minor = 0;
  uint32_t patch = 0;
};
 
int main() {
  std::optional<int> o1 = {};
  std::optional<int> o2 = 1;
  std::optional<Version> o3 = {};
  std::optional<Version> o4 = {{}};
 
  assert(!o1);
  assert(o2);
  assert(!o3);
  assert(o4);
}

std::optional - construct empty with {} or std::nullopt? Archive du 16/09/2019 le 01/02/2023

std::make_optional

std::make_optional force la création d'un optional alors que std::optional peut copier un optional.

#include <optional>
#include <type_traits>
 
int main()
{
    auto inner=std::make_optional(325);
    auto opt2=std::make_optional(inner); // makes std::optional<std::optional<int>>
    auto opt3=std::optional(inner);      // just a copy of inner
    static_assert(std::is_same_v<decltype(opt2), std::optional<std::optional<int>>>);
    static_assert(std::is_same_v<decltype(opt3), std::optional<int>>);
}

What is the point of `std::make_optional` Archive du 04/07/2020 le 14/03/2023

Spécificités

Opérateur ternaire

Il faut spécifier explicitement l'optional.

std::optional<int> t;
t = true ? 1 : std::optional<int>{std::nullopt};
lang/cpp/optional.txt · Dernière modification : 2023/03/14 12:27 de root