getter和setter的`noexcept`说明符

时间:2017-05-16 12:30:43

标签: c++ c++11

假设我有以下代码:

class A {
    public:
        void SetInteger(const int val) noexcept { integerMember = val; }
        void SetString(const std::string& val) { stringMember = val; }
        int GetInteger() const noexcept { return integerMember; }
        std::string GetString() const { return stringMember; }

    private:
        int integerMember;
        std::string stringMember;
}

对于整数类型和指针使用noexcept对我来说非常明显。

但是如果不是类和结构之类的整数类型的建议是什么,它们不会在构造函数/ copy-constructor和它们的部分的构造函数中明确地抛出异常(意味着在构造函数体中使用throw)?

3 个答案:

答案 0 :(得分:4)

对于可能抛出的函数,您应该避免使用noexcept说明符(除非您已准备好调用代码std::terminate())。不推荐使用明确的throw说明符,因此请不要依赖它们,而应使用noexcept operator。例如

template<typename T>
class Foo
{
  T m_datum;
public:
  Foo& SetDatum(T const&x) noexcept(noexcept(m_datum=x))
  {
    m_datum = x;
    return *this;
  }
};

答案 1 :(得分:2)

在特殊成员函数之外,SELECT right('000000'+CAST(a.Value as varchar(20)),6) AS Value FROM dbo.HPatientIdentifiers a JOIN HPatientVisit b ON a.Patient_oid=b.Patient_oid WHERE b.VisitTypeCode IN ('IP','EOP') AND a.IsVersioned=0 AND a.TYpe='MR' AND b.VisitEndDateTime >= DATEADD(dd,-1, GETDATE()) ORDER BY a.Value 不是 有用。但如果你想要它:

 from flask import current_user
 from flask_admin.contrib.sqla import ModelView

 class SomeView(ModelView):
     def get_query(self,*args,**kwargs):
         qs = super(SomeView,self).get_query(*args,**kwargs)
         qs = qs.filter_by(author=current_user)
         return qs

答案 2 :(得分:1)

getter的第一种方式:

LSOpenURLsWithRole() failed with error -10699...

第二种方式是制定者:

const std::string& GetString() const noexcept {return stringMember; }