CppCoreGuidelines C.49 在构造函数中进行初始化操作,不要进行赋值操作
18 October 2022
C.49: Prefer initialization to assignment in constructors
理由
所谓初始化,就是要设置初始值,而不是进行赋值。初始化操作更优雅,效率更高。可以防止值确定之前被误用之类的错误。
例子
class A { // Good string s1; public: A(czstring p) : s1{p} { } // GOOD: directly construct (and the C-string is explicitly named) // ... };
例子
class B { // BAD string s1; public: B(const char* p) { s1 = p; } // BAD: default constructor followed by assignment // ... }; class C { // UGLY, aka very bad int* p; public: C() { cout << *p; p = new int{10}; } // accidental use before initialized // ... };
例子
这里我们不用const char* s
我们用C++17中的std::string_view
或
gsl::span<char>
做函数的参数。
class D { // Good string s1; public: D(string_view v) : s1{v} { } // GOOD: directly construct // ... };