【问题标题】:Good naming convention for private member functions in C++?C++ 中私有成员函数的良好命名约定?
【发布时间】:2012-08-20 10:21:47
【问题描述】:

对于会员,我使用

//.......vv
SomeType m_XXX;
//.......^^

我喜欢使用_ 作为成员函数的前缀,但以___ 开头的名称是保留的,不应使用。

我的想法是,当我有:

SomeClass myObject;
myObject.[XXX]

当用户(lib)写点(.)时,查看所有只有public的函数(一个接一个)。

这有通用的命名约定吗?

我知道,我可以使用pImpl 或继承,以及接口和实现类

【问题讨论】:

  • 如果你喜欢的话,你可以在函数前加上impl_Impl...
  • 我认为这没有任何约定。在大多数 IDE 中点击一个点将区分公共方法和私有方法,并将它们分开显示。
  • 我使用_ 作为会员。但永远不要这样做__ 它保留用于内部
  • @juanchopanza - 使用后缀将不起作用,因为在编写 . 时,建议成员的顺序(很可能)是字母顺序。
  • @Nick - 使用___ 确实有前缀_ 甚至__,不是吗?

标签: c++ naming-conventions private-methods


【解决方案1】:

最常见的做法是命名成员函数时不使用任何公共前缀或后缀。就个人而言,我认为区分它们没有任何好处,如果您的动机与“编写点 (.) 以查看所有功能”有关,那么听起来您应该配置或更改您的编辑器,而不是更改您的编程风格以适应它.

【讨论】:

  • 哈,这很有趣。我没有想过这个(可以由IDE控制)。听起来合乎逻辑。
  • 想象一个类的成员名为id。以及一个接受另一个 id 的成员函数,例如setId(Id id)。编辑器如何帮助您区分这些?
  • 要称之为最常见的做法,您需要用统计数据来证明它。例如。扫描了 5000 个开源项目的源代码,发现 bla-bla-bla...
  • @Maxim: re id - 它没有......但是为什么要这样呢?一个类是一个足够小的范围,手动解决任何罕见的标识符冲突是一件轻而易举的事……它不是全局命名空间。而且,不管你信不信,我可以根据数十年的专业经验就常见做法发表声明。
  • @Maxim:不是这样的Maxim...我实际上已经在不止一个系统上工作过...样本量是十几家公司的数十个独立项目,加上所有在线材料,书籍等我见过。足以让我认识到一些全面的趋势。例如,一个人可能会认为这个讨论会完全浪费时间,因为已经看到太多喜欢它了。如果您认为自己的妙语很聪明或有见地,请再想一想!
【解决方案2】:

一个好的约定是结尾的下划线like_this_。前导下划线是 Python 的方式,但是,在 C++ 中,所有以下划线开头的标识符都保留用于实现。

另一种选择是始终使用this 作为成员访问前缀。

【讨论】:

  • 以下划线后跟大写字母的名称保留给实现。以下划线后跟小写字母的名称保留给实现在全局范围内使用。在非全局范围内,前导下划线后跟小写字母是可以的。这不是背书...
【解决方案3】:

我更喜欢使用_member,我更喜欢_camelCase 中的成员变量和静态成员No _ 并以Cap 开头

但不要使用_____或两个以上的下划线,它是为间隔保留的。 m_ 非常流行且陈旧,我第一次在 Visual C++ 中看到了这一点。但我个人觉得那很难看。

我找不到区分私有和公共实例变量的理由。但如果它是一个类变量,那么我会从 MyClass::MyVar 这样的 BigCap 开始

对于局部变量,我使用 xx_y 。所以当地人不会和会员发生冲突

【讨论】:

  • 只是想知道 Neel...当函数从私有移入/移出公共时,您是否必须重命名函数?试图回想一下我真正这样做的频率 - 棘手!你为受保护做什么?
  • 不。我不喜欢以不同的方式命名私有和公共。我以同样的方式对待受保护的和私有的。如果您需要将功能从私有移动到公共,那根本不是一个好的设计
  • 这不是关于成员变量,而是关于私有方法与公共方法。在这种情况下,我认为这几乎没有任何附加值,但如果您想公开公开私有方法,则会造成负担。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-02-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-05
相关资源
最近更新 更多