☰
  • 首页
  • 规则分类
  • 项目介绍
search
•••

不应过度使用 explicit 关键字

5.1.13 ID_excessiveExplicit
目录 › next › previous

对类的拷贝、移动以及不接受 1 个参数的构造函数一般不用 explicit 限定,否则有损代码的易用性和可扩展性。

示例:

class A {
public:
    explicit A(const A&);  // In general, ‘explicit’ is not required
    explicit A(A&&);       // Ditto
    explicit A(int, int);  // Ditto
    ....
};

当类的拷贝、移动构造函数被 explicit 限定时,无法再按值传递参数或按值返回对象,当不接受 1 个参数的构造函数被 explicit 限定时,无法再用初始化列表定义临时对象,如下代码将无法通过编译:

void foo(A);
void bar(const A&);

A a(1, 2);

foo(a);       // Compile error
bar({3, 4});  // Compile error

参考

C++ Core Guidelines C.46
Copyright©2024 360 Security Technology Inc., Licensed under the Apache-2.0 license.