首页 > 解决方案 > 函数参数可以隐藏另一个函数标识符吗?

问题描述

静态代码分析根据 Misra 规则 2-10-2 识别构造函数参数beginend隐藏相应成员函数(读取函数)的名称(在内部范围内声明的标识符不应隐藏在外部范围内声明的标识符)。这个对吗?

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;
}

标签: c++static-code-analysismisra

解决方案


在我的理解中,这个 MISRA 规则是关于代码可读性和避免混淆而不是破坏代码。

所以从句法的角度来看,你的程序是正确的,但从 MISRA 的角度来看,它违反了这条规则,因为它覆盖了已经存在的标识符。

如果极端,一些不太注意的程序员可能会因为使用相同的名称而感到困惑。

但从实际的角度来看,这确实是一个细节,在我看来,你可以保留它。但是如果你的公司强制执行 MISRA 规则,你应该修复它。


推荐阅读