Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/128.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 重新配置C++;处理“警告:未排序的修改和参数访问”的代码`_C++_Refactoring_Warnings - Fatal编程技术网

C++ 重新配置C++;处理“警告:未排序的修改和参数访问”的代码`

C++ 重新配置C++;处理“警告:未排序的修改和参数访问”的代码`,c++,refactoring,warnings,C++,Refactoring,Warnings,我正在编译的库中有几行代码,它们会发出警告(在OSX上),如下所示: 这一行代码看起来很糟糕,我发现很难绝对确定到底发生了什么 据我所知,fCosSqr的最终值应该是cos(m_角度)^2,而tmp的最终值应该是cos(m_角度)(尽管实际上tmp在程序的其他任何地方都没有使用) 可能会提供警告,因为如果赋值顺序不正确,则可以使用tmp的未初始化值,而不是cos(m_角度) 我可以把这行代码重写如下: float tmp = cos(m_angle), fCosSqr = tmp * tmp;

我正在编译的库中有几行代码,它们会发出警告(在OSX上),如下所示:

这一行代码看起来很糟糕,我发现很难绝对确定到底发生了什么

据我所知,
fCosSqr
的最终值应该是
cos(m_角度)^2
,而
tmp
的最终值应该是
cos(m_角度)
(尽管实际上
tmp
在程序的其他任何地方都没有使用)

可能会提供警告,因为如果赋值顺序不正确,则可以使用
tmp
的未初始化值,而不是
cos(m_角度)


我可以把这行代码重写如下:

float tmp = cos(m_angle), fCosSqr = tmp * tmp;
或者像这样:

float fCosSqr = cos(m_angle) * cos(m_angle);
?


为什么代码一直是这样写的?它应该提供某种速度增益吗?

没有很好的理由按原样编写代码。只要纠正它,并向最初写它的人提出严厉的抱怨。并且一定要检查来自同一个开发人员的任何类似的错误代码,因为库可能会被类似的错误所困扰


注意,您提供的第二种方法可能会产生一些额外的成本。除非编译器能够证明
cos
是一个纯函数(即具有相同参数的多个请求将产生相同的精确结果),否则它必须调用
cos
两次。添加临时值来保存中间值是好的,在同一行中定义多个变量不是很好,原始代码中未定义的行为是一个可怕的选择。

另一种可能是(内联)函数,
float fCosSqr=square(cos(m_角))。那么就不需要命名的临时文件了。
float fCosSqr = cos(m_angle) * cos(m_angle);