C++ 以C开头的类名

C++ 以C开头的类名,c++,visual-c++,mfc,hungarian-notation,C++,Visual C++,Mfc,Hungarian Notation,MFC的所有类名都以C开头。例如,CFile和CgdObject。有人在别处见过它吗?是否有微软的官方命名惯例指南推荐这种风格?这个想法是源于MFC还是其他项目?我们在工作中使用它,就像许多其他命名约定一样 我的意思是C代表类,p代表指针,m代表成员,s代表静态成员,n代表整数。。。文件不多我不能回答你所有的问题,但据我所知,这只是为了区分MFC类和其他类——匈牙利符号的一种形式 有趣的是,这显然是不只是在MS以外的争议,但是, < P>这是一个古老的C++编码风格,MFC可能是最后使用它的一个

MFC的所有类名都以C开头。例如,CFile和CgdObject。有人在别处见过它吗?是否有微软的官方命名惯例指南推荐这种风格?这个想法是源于MFC还是其他项目?

我们在工作中使用它,就像许多其他命名约定一样


我的意思是C代表类,p代表指针,m代表成员,s代表静态成员,n代表整数。。。文件不多

我不能回答你所有的问题,但据我所知,这只是为了区分MFC类和其他类——匈牙利符号的一种形式


有趣的是,这显然是不只是在MS以外的争议,但是,

< P>这是一个古老的C++编码风格,MFC可能是最后使用它的一个。p>

这通常只是C++的一个约定(也许还有其他几种语言),因此,随着COM和.NET。


你仍然可以看到它的表亲,接口的“I”前缀,经常出现。我一直觉得有趣的是,“C”死后“I”幸存了下来,但这可能是因为接口在COM互操作性中被大量使用。

这是邪恶的。除了抽象的东西,不要用匈牙利符号

例如,
btnSubmit
可以描述一个名为Submit的按钮(按钮旁边的标签将附带一个
lblSubmit


但是像类的
CMyClass
和名为count的无符号整数的
uiCount
这样的东西对程序员没有帮助,只会导致额外的浪费键入

> Symbian C++中有一些类似的东西,其约定是:

T类是“值”,例如TChar、TInt32、TDE

R类是内核(或其他)资源的句柄,例如RFile、RSocket

M类是mixin,其中包括接口(解释为没有函数实现的mixin)。指导原则是多重继承最多应涉及1个非M类

C类几乎是其他所有类,它派生自CBase,CBase中有一些东西可以帮助处理资源

HBufC的存在主要是为了在Symbian论坛上产生混乱的帖子,拥有自己的前缀只是一个开始。H代表“啊?”,或者可能是“唧唧,唧唧!你没有STL!”;-)

这在精神上接近于应用程序匈牙利符号,而不是系统匈牙利符号。前缀告诉您一些关于类的信息,您可以在文档中查找这些信息,但如果没有这些信息,您将不知道这些信息。在编程中命名任何东西的全部意义在于提供这样的提示和提醒,否则您只需将类称为“Class001”、“Class002”等等


匈牙利系统只是告诉你变量的类型,IMO是没有什么可兴奋的,尤其是在C++之类的语言中,类型往往是不断重复的,或者完全被模板参数隐藏。命名类型时的相似之处是Java使用I命名所有接口的实践。再说一次,我对此不太感兴趣(标准Java库也是如此),但是如果要为每个类定义一个接口,除了在非测试情况下实际用于多态性的接口之外,然后,您需要某种方法来区分这两者。

多年前,命名约定对于帮助识别类、类型甚至类的分组都至关重要。别忘了当时没有名称空间,也没有/有限的intellisense可用。C是匈牙利符号的一种形式,但MFC确实很流行。Borland和Delphi使用T作为类型的前缀

我记得Borland编译器与类名以“T”开头的库一起使用。可能用于“type”:

虽然MFC和许多为Windows编写的软件对类使用“C”约定,但在为UNIX平台编写的软件中通常找不到后者。我认为这是一个习惯,非常强烈的鼓励Visual C++。我记得VisualC++ 6会把一个C“前缀”到一个用类向导创建的类。

参见:对于这个问题的一篇长文章。

变量的约定对于像Fortran这样的语言是有用的,在使用Fortran之前,不需要声明变量的类型。我似乎记得,以“I”或“j”开头的变量默认为整数,以“r”和其他字母开头的变量默认为实(浮点)值


人们在需要声明变量的语言或类定义中使用类似的语言,这可能只是因为有人误解了Fortran等语言中的旧代码约定,而Fortran实际上很重要。

在编写使用Qt库的应用程序时,我们使用一种命名约定来区分直接或间接从QObject派生的类和非QObject派生的类。这很有用,因为您可以从类名中判断它是否支持信号/插槽、属性以及来自QObject的所有其他好东西。

我个人发现匈牙利符号对我很有帮助,因为我可以看到一个充满变量的屏幕,并在尝试理解逻辑时立即知道它们是什么。我看到你唯一反对它的理由是“额外键入”

是的,他们知道什么-例如,.NET指南拒绝给类加前缀,但对接口加前缀没问题。有时这种争论是没有充分理由的。我认为重要的是要清楚地传达这样一个事实,即类应该是一个接口,并且前缀为
I
可能仍然被广泛使用,因为它比后缀
Base
更短更清晰。它可能不会消亡,因为它解决了少数群体的问题(接口、泛型类型参数)和最常见的(CLA