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

不应重载逗号运算符

6.8.9 ID_overloadComma
目录 › next › previous

对于重载的逗号运算符,C++17 之前的标准未声明其子表达式的求值顺序,应避免重载逗号运算符以确保代码的兼容性和正确性。

示例:

class A { .... };

A& operator , (int, A&);   // Non-compliant

A& foo(int);

A& bar(int i) {
    return ++i, foo(i);   // May be disordered
}

例中逗号表达式意在将变量 i 增 1 后作为 foo 的参数,但逗号运算符被重载后变成了一个函数,++i 和 foo(i) 是函数的参数。在 C++17 之前,所有参数的求值顺序均是未声明的,foo(i) 可能会先被求值,++i 便失去了意义。C++17 明确了重载运算符参数的求值顺序与内置运算符一致,但遵循之前标准的编译器仍在广泛使用中,故应考虑兼容性,从而保证正确性。

相关

ID_overloadLogicOperator

依据

ISO/IEC 14882:2003 5.2.2(8)-unspecified ISO/IEC 14882:2011 5.2.2(8) ISO/IEC 14882:2017 16.3.1.2(2)

参考

MISRA C++ 2008 5-2-11
Copyright©2024 360 Security Technology Inc., Licensed under the Apache-2.0 license.