我在一个类中重载了2D下标操作符。为此,我使用-std=c++23
选项来编译程序。
现在当调用这个操作符时,GCC报错:
warning: top-level comma expression in array subscript changed meaning in C++23 [-Wcomma-subscript]
331 | m_characterMatrix[ x1, y1 ] = ch.value( );
| ~~~~~~~~~~~~~~~~~^
那么这个警告是什么呢?我应该认真对待吗?
出现警告是因为编译器的假设是您可能期望使用c++ 23之前的行为-即"传统的"逗号运算符求值。
(虽然常识会清楚地表明你打算使用你的过载,这是没有问题的,但计算机程序不具备常识。)
您可以使用-Wno-comma-subscript
禁用该警告。
使用无括号逗号表达式作为第二个(右)参数下标操作符的。
例如,a[b, c]不支持,a[(b, c)]不支持。未加括号的逗号表达式不能作为下标操作符的第二个(右)参数。例如,a[b, c]要么是病态的,要么等价于a.operator[](b, c)。在使用逗号表达式作为下标时需要括号,例如,a[(b, c)]。
通过:https://en.cppreference.com/w/cpp/language/operator_other
所以是的,我认为你应该在操作符[]中添加父符来保持旧的行为