13 September 2023

C++ 核心指南目录

“Require template arguments to be at least semiregular”

理由

可读性。避免出现惊讶和错误。很多应用场合支持这个规则。

例子

class X {
public:
    explicit X(int);
    X(const X&);            // copy
    X operator=(const X&);
    X(X&&) noexcept;        // move
    X& operator=(X&&) noexcept;
    ~X();
    // ... no more constructors ...
};

X x {1};              // fine
X y = x;              // fine
std::vector<X> v(10); // error: no default constructor

注意

半正则需要默认可构造。

强化

  • 标注模板参数不是半正则的情况。