getter和setter的`noexcept`说明符

Ale*_*lex 8 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;
}
Run Code Online (Sandbox Code Playgroud)

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

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

Wal*_*ter 4

您应该避免noexcept对可能抛出异常的函数使用说明符(除非您准备好让代码调用std::terminate())。显式throw说明符已被弃用,因此不要依赖它们,而是使用noexcept运算符。例如

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

  • 我见过`m_`和`_`,但是`_m_`?:o (4认同)
  • @BartoszKP 这只是另一个步骤,直到一个真正的 `_m_e_m_b_e_r_` 前缀到达。所有人都会对它感到失望,并感到绝望。 (3认同)