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

不应重载取地址运算符

6.8.8 ID_overloadAddressOperator
目录 › next › previous

重载的取地址运算符可以返回任意类型的数据,易被误用,非智能指针相关的基础类不应重载取地址运算符。

获取“不完整类型(incomplete type)”的对象地址时,如果其完整类型重载了取地址运算符,会导致标准未定义的行为。

示例:

struct X;   // Incomplete type

X* foo(X& x) {
    return &x;   // Undefined behavior
}

struct X {
    X* operator &();   // Non-compliant
};

X* bar(X& x) {
    return &x;   // Call ‘X::operator&’
}

例中 foo 会导致未定义的行为,可能会返回 x 对象的实际地址,而 bar 会调用重载了的取地址运算符,这是一种混乱的局面。

依据

ISO/IEC 14882:2003 5.3.1(4)-undefined ISO/IEC 14882:2011 5.3.1(5)-undefined

参考

C++ Core Guidelines C.166 MISRA C++ 2008 5-3-3
Copyright©2024 360 Security Technology Inc., Licensed under the Apache-2.0 license.