Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения
<rhs>содержит значение

[5
  • Возвращение:<*this>;
  • Постусловия:<bool(rhs)==bool(*this)>.
  • Безопасность исключения:Если выбросить какое-либо исключение, состояние инициализации<*this>и<rhs>остается неизменным. Если во время вызова к конструктору копии<T>будет сделано исключение, никакого эффекта. Если во время запроса на уступку копии<T>было сделано исключение, то состояние ее содержащегося значения определяется гарантией безопасности исключения уступки копии<T>.
  • Пример:<
    Tv;
    optional<T>opt(v);
    optional<T>def;
    opt=def;
    assert(!def);
    // previous value (copy of 'v') destroyed from within 'opt'.
    
    >
  • space

    <optional& optional<T>::operator=(optional&&rhs )noexcept(>Смотрите ниже<);>

    • Требует:<T><MoveConstructible>и<MoveAssignable>.
    • Эффекты:

    Detailed Semantics - Optional Values

    Boost , Boost.Optional , Header <boost/optional/optional.hpp>

    Boost C++ Libraries

    ...one of the most highly regarded and expertly designed C++ library projects in the world. Herb Sutter and Andrei Alexandrescu, C++ Coding Standards

    PrevUpHomeNext
    [Note] Note

    Следующий раздел содержит различные<assert()>, которые используются только для отображения постусловий в качестве примера кода. Не подразумевается, что тип<T>должен поддерживать каждое конкретное выражение, но что если выражение поддерживается, подразумевается условие.

    space

    <optional<T>::optional() noexcept;>

    • Эффект:По умолчанию конструирует<optional>.
    • Постусловия:<*this>являетсянеинициализированным.
    • Примечание:Конструктор по умолчанию Tне называется.
    • Пример:<
      optional<T>def;
      assert(!def);
      
      >

    space

    <optional<T>::optional( none_t) noexcept;>

    • Эффект:Построение неинициализированного<optional>.
    • Постусловия:<*this>являетсянеинициализированным.
    • Примечания:<T>Конструктор по умолчаниюне называется. Выражение<boost::none>обозначает экземпляр<boost::none_t>, который может использоваться в качестве параметра.
    • Пример:<
      #include<boost/none.hpp>
      optional<T>n(none);
      assert(!n);
      
      >

    space

    <optional<T>::optional( Tconst&v)>

    • Требует:<is_copy_constructible<T>::value><true>.
    • Эффект:Непосредственно строит<optional>.
    • Постусловия:<*this>инициализированои его значение составляеткопия<v>.
    • Бросок:Все, что бросит<T::T(Tconst& )>.
    • Примечания:<T::T(Tconst& )>называется.
    • Безопасность исключения:Исключения могут быть сделаны только в течение<T::T(Tconst& );>в этом случае этот конструктор не имеет никакого эффекта.
    • Пример:<
      Tv;
      optional<T>opt(v);
      assert(*opt==v);
      
      >

    space

    <optional<T>::optional( T&& v)>

    • Требует:<is_move_constructible<T>::value><true>.
    • Эффект:Прямое перемещение конструирует<optional>.
    • Пост-условия:<*this>являетсяинициализированным, и его значение выводится из<v>.
    • Бросает:Что бросит<T::T(T&&)>.
    • Примечания:<T::T(T&&)>называется.
    • Безопасность исключения:Исключения могут быть сделаны только в течение<T::T(T&&);>в этом случае, состояние<v>определяется гарантиями безопасности исключения для<T::T(T&&)>.
    • Пример:<
      Tv1,v2;
      optional<T>opt(std::move(v1));
      assert(*opt==v2);
      
      >

    space

    <optional<T>::optional( boolcondition,Tconst&v);>

    • Если условие верно, то же самое, что:

    <optional<T>::optional( Tconst&v)>

    • В противном случае, как:

    <optional<T>::optional()>

    space

    <optional<T>::optional( optionalconst&rhs );>

    • Требует:<is_copy_constructible<T>::value><true>.
    • Эффект:Копирует<optional>.
    • Постусловия:Если rhs инициализируется,<*this>инициализируется и его значение составляеткопиязначения<rhs>; в противном случае<*this>неинициализируется.
    • Бросок:Все, что бросит<T::T(Tconst& )>.
    • Примечания:Если rhs инициализирован,<T::T(Tconst&)>называется.
    • Безопасность исключения:Исключения могут быть сделаны только в течение<T::T(Tconst& );>в этом случае этот конструктор не имеет никакого эффекта.
    • Пример:<
      optional<T>uninit;
      assert(!uninit);
      optional<T>uinit2(uninit);
      assert(uninit2==uninit);
      optional<T>init(T(2));
      assert(*init==T(2));
      optional<T>init2(init);
      assert(init2==init);
      
      >

    space

    <optional<T>::optional( optional&& rhs) noexcept(>смотрите ниже<);>

    • Требует:<is_move_constructible<T>::value><true>.
    • Эффект:Перемещает<optional>.
    • Постусловия:Если<rhs>инициализировано,<*this>инициализируется и его значение перемещается из<rhs>; в противном случае<*this>является неинициализированным.
    • Бросает:Что бросит<T::T(T&&)>.
    • Замечания:Выражение внутри<noexcept>эквивалентно<is_nothrow_move_constructible<T>::value>.
    • Примечания:Если<rhs>инициализировано,<T::T(T&& )>называется.
    • Безопасность:Исключения могут быть выброшены только в течение<T::T(T&&);>, в этом случае<rhs>остается инициализированным, а значение<*rhs>определяется безопасностью исключения<T::T(T&&)>.
    • Пример:<
      optional<std::unique_ptr<T>>uninit;
      assert(!uninit);
      optional<std::unique_ptr<T>>uinit2(std::move(uninit));
      assert(uninit2==uninit);
      optional<std::unique_ptr<T>>init(std::uniqye_ptr<T>(newT(2)));
      assert(**init==T(2));
      optional<std::unique_ptr<T>>init2(std::move(init));
      assert(init);
      assert(*init==nullptr);
      assert(init2);
      assert(**init2==T(2));
      
      >

    space

    <template<U>explicitoptional<T>::optional(optional<U>const&rhs );>

    • Эффект:Копирует<optional>.
    • Постусловия:Если<rhs>инициализировано,<*this>инициализируется и его значение представляет собойкопиюзначения rhs, преобразованного в тип<T>; другое<*this>является неинициализированным.
    • Броски:Все, что<T::T(Uconst& )>бросает.
    • Примечания:<T::T(Uconst& )>вызывается, если<rhs>инициализируется, что требует действительного преобразования из<U>в<T>.
    • Безопасность исключения:Исключения могут быть сделаны только во время<T::T(Uconst& );>, в этом случае этот конструктор не имеет эффекта.
    • Пример:<
      optional<double>x(123.4);
      assert(*x==123.4);
      optional<int>y(x);
      assert(*y==123);
      
      >

    space

    <template<U>explicitoptional<T>::optional(optional<U>&&rhs );>

    • Эффект:Перемещает<optional>.
    • Постусловия:Если<rhs>инициализируется,<*this>инициализируется и его значение перемещается от<*rhs>; в противном случае<*this>неинициализируется.
    • Бросает:Что бросит<T::T(T&&)>.
    • Примечания:<T::T(U&&)>вызывается, если<rhs>инициализируется, что требует действительного преобразования из<U>в<T>.
    • Безопасность исключения:Исключения могут быть сделаны только в течение<T::T(U&&);>, в этом случае<rhs>остается инициализированным, а значение<*rhs>определяется гарантией безопасности исключения<T::T(U&& )>.
    • Пример:<
      optional<double>x(123.4);
      assert(*x==123.4);
      optional<int>y(std::move(x));
      assert(*y==123);
      
      >

    space

    <template<InPlaceFactory> explicitoptional<T>::optional(InPlaceFactory const& f);>

    <template<TypedInPlaceFactory> explicitoptional<T>::optional(TypedInPlaceFactory const& f);>

    • Эффект:Конструирует<optional>со стоимостью<T>, полученной с завода.
    • Пост-условия:<*this>инициализированои его значениенепосредственно данос завода<f>(т.е. значениене скопировано).
    • Броски:Что бы ни бросил конструктор<T>, вызванный заводом.
    • Примечания:См.Заводы на местах
    • Безопасность исключения:Исключения могут быть сделаны только во время вызова конструктора<T>, используемого заводом; в этом случае этот конструктор не имеет эффекта.
    • Пример:<
      classC{C(char,double,std::string);};
      Cv('A',123.4,"hello");
      optional<C>x(in_place ('A',123.4,"hello"));// InPlaceFactory used
      optional<C>y(in_place<C>('A',123.4,"hello"));// TypedInPlaceFactory used
      assert(*x==v);
      assert(*y==v);
      
      >

    space

    <optional& optional<T>::operator=(none_t )noexcept;>

    • Эффект:Если<*this>инициализирован, то его содержащееся значение разрушается.
    • <*this>является неинициализированным.

    space

    <optional& optional<T>::operator=(Tconst&rhs);>

    • Эффект:Назначает значение<rhs>на<optional>.
    • Последующие условия:<*this>инициализируется и его значение составляеткопия<rhs>.
    • Бросает:Все, что<T::operator=(Tconst& )>или<T::T(Tconst&)>бросает.
    • Примечание:Если<*this>было инициализировано,<T>используется оператор присвоения, в противном случае используется его копи-конструктор.
    • Безопасность:В случае исключения состояние инициализации<*this>остается неизменным, а его значение не определено в отношении<optional>(до<T>'s<operator=()>). Если<*this>изначально неинициализирована и<T>копировальный конструкторвыходит из строя,<*this>остается должным образом неинициализированным.
    • Пример:<
      Tx;
      optional<T>def;
      optional<T>opt(x);
      Ty;
      def=y;
      assert(*def==y);
      opt=y;
      assert(*opt==y);
      
      >

    space

    <optional& optional<T>::operator=(T&&rhs );>

    • Эффект:Переносит значение<rhs>на<optional>.
    • Последующие условия:<*this>инициализируется и его значение перемещается из<rhs>.
    • Броски:Все, что<T::operator=(T&&)>или<T::T(T&&)>бросает.
    • Примечания:Если<*this>был инициализирован,<T>используется оператор назначения движения, в противном случае используется его конструктор перемещения.
    • Безопасность исключения:В случае исключения состояние инициализации<*this>остается неизменным, а его значение не определено в отношении<optional>(до<T>'s<operator=()>). Если<*this>изначально неинициализировано и<T>движущийся конструкторвыходит из строя,<*this>остается должным образом неинициализированным.
    • Пример:<
      Tx;
      optional<T>def;
      optional<T>opt(x);
      Ty1,y2,yR;
      def=std::move(y1);
      assert(*def==yR);
      opt=std::move(y2);
      assert(*opt==yR);
      
      >

    space

    <optional& optional<T>::operator=(optional const& rhs) ;>

    <*this>не содержит значения

    придает<*rhs>содержащемуся значению

    инициализирует содержащееся значение так, как если бы прямое инициализация объекта типа<T><*rhs>

    [<val->T::~T()>

    никакого эффекта

  • Возвращение:<*this>;
  • Постусловия:<bool(rhs)==bool(*this)>.
  • Замечания:Выражение внутри<noexcept>эквивалентно<is_nothrow_move_constructible<T>::value&& is_nothrow_move_assignable<T>::value>.
  • Безопасность:Если выбросить какое-либо исключение, состояние инициализации<*this>и<rhs>остается неизменным. Если во время вызова к<T>движущемуся конструктору выпадает исключение, то состояние<*rhs>определяется гарантией безопасности исключения<T>движущегося конструктора. Если во время призыва к назначению движения Т делается исключение, то состояние<**this>и<*rhs>определяется гарантией безопасности исключения назначения перемещения Т.
  • Пример:<
    optional<T>opt(T(2));
    optional<T>def;
    opt=def;
    assert(def);
    assert(opt);
    assert(*opt==T(2));
    
    >
  • space

    <template<U>optional& optional<T>::operator=(optional<U>const&rhs );>

    • Эффект:

      [7

    • Возвращение:<*this>.
    • Постусловия:<bool(rhs)==bool(*this)>.
    • Безопасность исключения:В случае исключения результат выражения<bool(*this)>остается неизменным. Если во время вызова к конструктору<T>бросается исключение, никакого эффекта. Если во время вызова на уступку<T>выпадает исключение, то состояние его содержащегося значения определяется гарантией безопасности исключения уступки копии<T>.
    • Пример:<
      Tv;
      optional<T>opt0(v);
      optional<U>opt1;
      opt1=opt0;
      assert(*opt1==static_cast<U>(v));
      
      >

    space

    <template<U>optional& optional<T>::operator=(optional<U>&&rhs );>

    • Эффект:

      <rhs><rhs><rhs><rhs><rhs><rhs><rhs><std::move(*rhs)>

      придает содержащемуся значению<std::move(*rhs)>

      инициализацию содержащегося значения, как если бы прямое инициализация объекта типа<T><std::move(*rhs)>[90<val->T::~T()>

      никакого эффекта

    • Возвращение:<*this>.
    • Постусловия:<bool(rhs)==bool(*this)>.
    • Безопасность исключения:В случае исключения результат выражения<bool(*this)>остается неизменным. Если во время вызова к конструктору<T>бросается исключение, никакого эффекта. Если во время вызова на уступку<T>выпадает исключение, то состояние его содержащегося значения определяется гарантией безопасности исключения уступки копии<T>.
    • Пример:<
      Tv;
      optional<T>opt0(v);
      optional<U>opt1;
      opt1=std::move(opt0);
      assert(opt0);
      assert(opt1)
      assert(*opt1==static_cast<U>(v));
      
      >

    space

    <template<class...Args> voidoptional<T>::emplace(Args&&...args );>

    • Требуется:Компилятор поддерживает ссылки на rvalue и вариадные шаблоны.
    • Эффект:Если<*this>- инициализированные вызовы<*this=none>. Затем инициализирует на месте содержащееся значение, как будто непосредственно инициализирует объект типа<T>с<std::forward<Args>(args)...>.
    • <*this>являетсяинициализированным.
    • Броски:Что бы ни бросил выбранный<T>конструктор.
    • Безопасность исключения:Если во время инициализации<T>выбрасывается исключение,<*this>являетсянеинициализированным.
    • Примечание:<T>не обязательно<MoveConstructible>или<MoveAssignable>. На компиляторах, не поддерживающих вариадные шаблоны, подпись возвращается к двум перегрузкам:<template<class Arg> voidemplace(Arg&&arg)>и<void emplace()>. На компиляторах, которые не поддерживают ссылки на значение r, подпись возвращается к трем перегрузкам: взятию ссылки<const>и ссылки не на<const>lvalue и третьему с пустым списком аргументов функции.
    • Пример:<
      Tv;
      optional<constT>opt;
      opt.emplace(0);// create in-place using ctor T(int)
      opt.emplace(); // destroy previous and default-construct another T
      opt.emplace(v);// destroy and copy-construct in-place (no assignment called)
      
      >

    space

    <template<InPlaceFactory> optional<T>& optional<T>::operator=(InPlaceFactoryconst&f);>

    <template<TypedInPlaceFactory> optional<T>& optional<T>::operator=(TypedInPlaceFactoryconst&f);>

    • Эффект:Назначает<optional>со значением<T>, полученным с завода.
    • Пост-условия:<*this>инициализированои его значениенепосредственно данос завода<f>(т.е. значениене скопировано).
    • Броски:Что бы ни бросил конструктор<T>, вызванный заводом.
    • Примечания:См.Заводы на местах
    • Безопасность исключения:Исключения могут быть сделаны только во время вызова конструктора<T>, используемого заводом; в этом случае объект<optional>будет сброшен на.неинициализированный.

    space

    <voidoptional<T>::reset(Tconst&v);>

    • Осужденный:такой же, как<operator= (T const& v) ;>

    space

    <voidoptional<T>::reset()noexcept ;>

    • Уничижение:То же, что<operator=( none_t);>

    space

    <Tconst&optional<T>::get()const;>

    <T& optional<T>::get();>

    <inlineT const& get( optional<T>const&);>

    <inlineT&get (optional<T>&) ;>

    • Требуется:<*this>
    • 1117Возврат:Ссылка на содержащуюся стоимость
    • Бросает:Ничего.
    • 1126Примечания:Это требование подтверждается<BOOST_ASSERT()>.

    space

    <Tconst&optional<T>::operator*()const&;>

    <T& optional<T>::operator*() &;>

    • Требуется:<*this>
    • 1117Возврат:Ссылка на содержащуюся стоимость
    • Бросает:Ничего.
    • Примечания:Это требование подтверждается<BOOST_ASSERT()>. На компиляторах, не поддерживающих ref-квалификаторы функций-членов, эти две перегрузки заменяются классическими двумя: a<const>и non-<const>функциями-членами.
    • Пример:<
      Tv;
      optional<T>opt(v);
      Tconst&u=*opt;
      assert(u==v);
      Tw;
      *opt=w;
      assert(*opt==w);
      
      >

    space

    <T&& optional<T>::operator*() &&;>

    • Требуется:<*this>содержит значение.
    • Эффекты:Эквивалентно<returnstd::move(*val);>.
    • Примечания:Это требование подтверждается<BOOST_ASSERT()>. На компиляторах, не поддерживающих ref-квалификаторы на функциях-членах эта перегрузка отсутствует.

    space

    <Tconst&optional<T>::value()const&;>

    <T& optional<T>::value()&;>

    • Эффекты:эквивалентно<returnbool(*this)?*val:throwbad_optional_access();>.
    • Примечания:На компиляторах, не поддерживающих ref-квалификаторы на членских функциях, эти две перегрузки заменяются классическими двумя: a<const>и non-<const>.
    • Пример:<
      Tv;
      optional<T>o0,o1(v);
      assert(o1.value()==v);
      try{
       o0.value();// throws
       assert(false);
      }
      catch(bad_optional_access&){
       assert(true);
      }
      
      >

    space

    <T&& optional<T>::value()&&;>

    • Эффекты:Эквивалентно<returnbool(*this)?std::move(*val):throwbad_optional_access();>.
    • Примечания:На компиляторах, не поддерживающих ref-квалификаторы на функциях-членах эта перегрузка отсутствует.

    space

    <template<classU>Toptional<T>::value_or(U&& v) const& ;>

    • Эффекты:эквивалентно<if(*this)return**this;elsereturn std::forward<U>(v);>.
    • Замечания:Если<T>не является<CopyConstructible>или<U&&>не является конвертируемым в<T>, программа плохо сформирована.
    • Примечания:На компиляторах, не поддерживающих ref-квалификаторы функций-членов, эта перегрузка заменяется на<const>-квалифицированную функцию-члена. На компиляторах без ссылочной поддержки rvalue тип<v>становится<Uconst&>.

    space

    <template<classU>Toptional<T>::value_or(U&& v) &&;>

    • Эффекты:эквивалентно<if(*this)returnstd::move(**this);elsereturnstd::forward<U>(v);>.
    • Замечания:Если<T>не является<MoveConstructible>или<U&&>не конвертируется в<T>, программа плохо сформирована.
    • Примечания:На компиляторах, не поддерживающих ref-квалификаторы на функциях-членах эта перегрузка отсутствует.

    space

    <template<classF>Toptional<T>::value_or_eval(Ff)const&;>

    • Требуется:<T>является<CopyConstructible>и<F>модели<Generator>, чей тип результата преобразуется в<T>.
    • Эффекты:<if (*this)return**this;elsereturnf();>.
    • Примечания:На компиляторах, не поддерживающих ref-квалификаторы функций-членов, эта перегрузка заменяется на<const>-квалифицированную функцию-члена.
    • Пример:<
      intcomplain_and_0()
      {
       clog<<"no value returned, using default"<<endl;
       return0;
      }
      optional<int>o1=1;
      optional<int>oN=none;
      inti=o1.value_or_eval(complain_and_0);// fun not called
      assert(i==1);
      intj=oN.value_or_eval(complain_and_0);// fun called
      assert(i==0);
      
      >

    space

    <template<classF>Toptional<T>::value_or_eval(Ff)&& ;>

    • Требуется:<T>—<MoveConstructible>и<F>модели a<Generator>, чей тип результата преобразуется в<T>.
    • Эффекты:<if (*this)returnstd::move(**this);elsereturn f();>.
    • Примечания:На компиляторах, не поддерживающих ref-квалификаторы на функциях-членах эта перегрузка отсутствует.

    space

    <Tconst&optional<T>::get_value_or(Tconst&default)const;>

    <T& optional<T>::get_value_or( T& default) ;>

    • Используйте<value_or()>.
    • Возврат:Ссылка на содержащееся значение, если таковое имеется, или<default>.
    • Бросает:Ничего.
    • Пример:<
      Tv,z;
      optional<T>def;
      Tconst&y=def.get_value_or(z);
      assert(y==z);
      optional<T>opt(v);
      Tconst&u=opt.get_value_or(z);
      assert(u==v);
      assert(u!=z);
      
      >

    space

    <Tconst*optional<T>::get_ptr()const;>

    <T* optional<T>::get_ptr() ;>

    • Возврат:Если<*this>инициализировано, указатель на содержащееся значение; другое<0>нуль.
    • Бросает:Ничего.
    • Примечания:Содержащееся значение постоянно хранится в<*this>, поэтому вы не должны удерживать или удалять этот указатель.
    • Пример:<
      Tv;
      optional<T>opt(v);
      optional<T>constcopt(v);
      T*p=opt.get_ptr();
      Tconst*cp=copt.get_ptr();
      assert(p==get_pointer(opt));
      assert(cp==get_pointer(copt));
      
      >

    space

    <Tconst*optional<T>::operator ->()const ;>

    <T* optional<T>::operator->() ;>

    • Требуется:<*this>инициализируется.
    • Возврат:Указатель на содержащееся значение.
    • Бросает:Ничего.
    • 1126Примечания:Это требование подтверждается<BOOST_ASSERT()>.
    • Пример:<
      structX{intmdata;};
      Xx;
      optional<X>opt(x);
      opt->mdata=2;
      
      >

    space

    <explicitoptional<T>::operator bool() constnoexcept ;>

    • Возвращение:<get_ptr()!=0>.
    • Примечания:На компиляторах, которые не поддерживают явные операторы конверсии, это возвращается к идиоме Safe-bool.
    • Пример:<
      optional<T>def;
      assert(def==0);
      optional<T>opt(v);
      assert(opt);
      assert(opt!=0);
      
      >

    space

    <booloptional<T>::operator!()noexcept ;>

    • Возвращение:Если<*this>является неинициализированным,<true>, то<false>.
    • Примечания:Этот оператор предусмотрен для тех компиляторов, которые не могут использовать операторнеуказанного типа пулав определенных булевых контекстах.
    • Пример:<
      optional<T>opt;
      assert(!opt);
      *opt=some_T;
      // Notice the "double-bang" idiom here.
      assert(!!opt);
      
      >

    space

    <booloptional<T>::is_initialized()const;>

    • То же, что<explicitoperator bool() ;>

    PrevUpHomeNext

    Статья Detailed Semantics - Optional Values раздела Boost.Optional Header <boost/optional/optional.hpp> может быть полезна для разработчиков на c++ и boost.




    Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.



    :: Главная :: Header <boost/optional/optional.hpp> ::


    реклама


    ©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
    Top.Mail.Ru

    Время компиляции файла: 2024-08-30 11:47:00
    2025-05-20 06:45:41/0.020116806030273/1