如何修复Weror=圆括号(建议在赋值周围使用圆括号)错误



我有一行代码,它同时执行赋值和条件。我可以把它分成两行,但我只是对抛出的错误消息感到好奇。

if ( parameters->__size = m_Elements.size() ) 

得到这个错误:建议在赋值周围使用括号作为真值[-Weror=括号]

我试过了:

if ( (parameters->__size) = (m_Elements.size()) )

这个错误不会消失。但我觉得我已经完成了提示我做的事情,并在作业周围加了括号。为什么错误没有消失?我错过了什么?

要让编译器相信赋值是真正想要的,需要将整个表达式括在括号中,如下所示:

if ( ( parameters->__size = m_Elements.size() ) ) 
//...

如果没有这一点,编译器会认为您可能犯了一个错误,使用赋值(=(而不是比较(==(运算符。

警告建议您将括号放在赋值表达式周围,而不是放在单个操作数周围。你可以通过使其静音

if ( ( parameters->__size = m_Elements.size() ) )
// ^                                        ^   

然而,问问自己,这是否真的比原来更好。我想你打开警告是有原因的,建议的修复程序确实会使警告静音,但代码仍然会给读者带来和以前一样的混乱。你可以这样做:

parameters->__size = m_Elements.size();
if (parameters->__size)

该消息意味着您应该将赋值表达式括在括号中。

这不是

if ( (parameters->__size) = (m_Elements.size()) )

你应该写

if ( ( parameters->__size = m_Elements.size() ) )

当代替比较运算符==而键入赋值运算符=时,这种方法允许区分打字错误和在条件中有意使用赋值。

最新更新