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

重载的类型转换运算符需用 explicit 关键字限定

5.1.12 ID_missingExplicitConvertor
目录 › next › previous

为了避免意料之外的类型转换,重载的类型转换运算符需用 explicit 关键字限定。

示例:

struct A {
    ....
    operator char*();   // Non-compliant
};

A foo();

char* bar() {
    return foo();   // Invalid address returned
}

例中 foo 返回临时对象,类型转换运算符被隐式调用,然而当 bar 返回后,临时对象被销毁,返回的指针是无效的。

将类型转换运算符用 explicit 关键字限定,有问题的代码便不会通过编译:

struct A {
    ....
    explicit operator char*();   // Compliant
};

在类的接口设计中,应尽量减少隐式转换以避免不易察觉的问题。

相关

ID_missingExplicitConstructor

参考

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