msvc 的 cpp 核心指南代码分析器告诉我
警告 C26472 不要使用static_cast
用于算术转换。使用
大括号初始化,gsl::narrow_cast
or gsl::narrow
(类型1)。
对于这个片段
static_cast<IntType>(static_cast<unsigned long long>(hexValue(digit)) << (digitIdx * 4));
为什么我不应该在这里使用 static_cast ?
另外,使用大括号初始化,这看起来像这样
IntType{unsigned long long{hexValue(digit)} << (digitIdx * 4)};
我认为这看起来并没有更好。这看起来更像是函数风格的转换而不是其他任何东西。
我无法使用 gsl,我认为gsl::narrow
是一个包装器static_cast
本身,那么这纯粹是一个可读性问题吗?
那么这纯粹是一个可读性问题吗?
没有。大括号初始化禁止缩小转换,并会导致诊断。该指南的目的是帮助保护代码免遭意外缩小。 Astatic_cast
将允许通过静默缩小转换。
您似乎正在处理整数,因此缺少使用大于的扩展整数类型unsigned long long
,您可能不会遇到任何缩小。
但指南适用于一般情况,即使没有实际风险,最好一致地编写代码。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)