静态代码分析将构造函数参数begin和end标识为根据Misra规则2-10-2隐藏相应成员函数(读取函数)的名称(内部作用域中声明的标识符不应隐藏外部作用域中声明的标识符)。这是正确的吗?
template <typename T>
class TLineSegment
{
public:
TLineSegment(const point_type& begin, const point_type& end)
: m_begin(begin)
, m_end(end)
{
}
const point_type& begin() const
{
return m_begin;
}
const point_type& end() const
{
return m_end;
}
private:
point_type m_begin;
point_type m_end;
}发布于 2020-11-27 20:41:13
在我的理解中,这条MISRA规则是关于代码的可读性和避免混淆,而不是破坏代码。
所以从语法的角度来看,你的程序是正确的,但是从MISRA的角度来看,它违反了这个规则,因为它覆盖了已经存在的标识符。
如果极端地说,一些不太注意的程序员可能会因为使用相同的名称而感到困惑。
但从实际的角度来看,这确实是一个细节,在我看来,您可能会留下它。但如果你的公司强制MISRA规则,你应该解决它。
发布于 2020-11-27 22:52:02
编译器首先查看names,然后再由决定如何处理它们。因此,begin是函数参数的名称。编译器不会忽略这一点,看看是否有其他定义可以在函数调用中使用。
https://stackoverflow.com/questions/65037399
复制相似问题