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

禁用在类之外定义的联合体

5.3.2 ID_forbidNakedUnion
目录 › next › previous

联合体各成员共享存储地址,易引发意料之外的错误。如果一定要使用联合体,需对其进行一定的封装,避免对成员的错误访问。

不应出现:

  • 在命名空间作用域内定义的联合体
  • 在类中定义的具有 public 访问权限的联合体

示例:

union U {      // Non-compliant, global union
    ....
};

class A {
public:
    union {    // Non-compliant, public union
        ....
    };
};

class B {
public:
    ....       // Interfaces about the union
private:
    union {    // Compliant, the union is under control
        ....
    };
};

类的 public 数据成员本来就违反了封装原则,如果这种数据成员又处于联合体中,会进一步增加风险。

相关

ID_forbidUnion

参考

C++ Core Guidelines C.181 MISRA C 2004 18.4 MISRA C 2012 19.2 MISRA C++ 2008 9-5-1
Copyright©2024 360 Security Technology Inc., Licensed under the Apache-2.0 license.