6

我目前正在浏览learncpp.com的 C++ 教程,我看到他们的变量命名趋势让他们使用“n”前缀(即 int nValue)和 char 变量(即 char ch 操作)。这是我现在应该养成的习惯吗?

4

4 回答 4

13

这在业界是司空见惯的事情吗?

这种做法在 20 或 30 年前在 Microsoft 的某些部门很常见,因为误解了公司其他部门使用的更有用的约定(标记变量表明它们的目的,在弱类型语言中,可以帮助避免各种类别错误)。在 C++ 之类的强类型语言中,这两种约定都没有任何有用的用途:类型系统可以自动且更可靠地捕获此类错误。

在微软(大概)意识到它毫无意义并建议不要使用它之后很久,它就被其他人广泛使用,大概是相信模仿微软的习惯也可能模仿他们的成功。今天仍然偶尔会看到,那些养成习惯并且从不质疑其有用性的人,以及那些将风格指南优先于软件的公司。

就个人而言,我发现它可以作为一个警告,即代码可能包含更糟糕的恐怖。

我现在应该养成习惯吗?

如果您在更改变量类型时忘记更新标签,它只会使代码更难阅读,并且会产生误导。你应该养成编写清晰易读的代码的习惯,而不是在上面撒上神秘的符文。

免责声明:关于微软的简短评论旨在提供历史背景,并不旨在成为微软政策决定的权威说明;具体来说,“[微软]意识到[它]毫无意义”的意思是“[微软的一些人]意识到[正在讨论的主题,在大多数情况下在现代 C++ 中使用冗余类型标签]是毫无意义的”不是(作为评论员似乎已经阅读)“[整个微软]意识到[所有使用变量标记]都是毫无意义的”。所有意见都是我自己的,可能基于不完善的知识。

于 2013-08-17T02:34:34.080 回答
2

是的,它们很常见(尤其是在 Windows 相关项目中)

但是不同的项目可能使用不同的编码风格。因此,如果您正在处理现有项目,那么最好的办法就是坚持它已经遵循的风格。

您提到的命名风格称为Hungarian style,通常用于 Windows 相关项目。在匈牙利风格中,变量采用驼峰式格式(例如,驼峰式)并以它们的范围和类型作为前缀:

[scope prefix]_[variable type][actual variable name in camel-cased style]

例如:

m_nMemberInteger

是一个整数(根据它的前缀n),此外,它是某个结构/类的成员变量(根据它的前缀m_),您可以在上面的链接中找到匈牙利风格中使用的范围和类型前缀的完整列表.

但是,在基于 linux 的项目中,您通常会发现人们使用不同的编码风格(例如, Google c++ 编码风格),它们只使用小写字母和下划线_来命名他们的变量。

于 2013-08-17T02:10:45.827 回答
0

这看起来类似于匈牙利符号。有时会使用这些东西,尤其是在某些编程领域。我个人认为它使代码看起来很混乱。在 C++ 中,您应该更多地考虑对象的含义,而不是它的底层类型可能恰好是什么。现代编辑器很容易让你查找变量的类型,所以它有点过时了。我可以理解为什么当编辑器没有那么有用时使用它..

于 2013-08-17T02:12:04.473 回答
0

正如其他评论中提到的,这被称为“匈牙利符号”,用于使变量的类型显而易见。虽然可能有争议的是是否值得为类型添加标签,但另一个常见的约定(尤其是在 C++ 中)是使用前缀来指示有关变量使用的信息。这对于引用和成员变量特别有用。例如,一个人可能有一个看起来像

void MyClass::myMethod(const int& iInput, int& oOutput, int &ioInputAndOutput)
{
    oOutput = ioInputAndOutput + mMemberData + iInput;
    ioInputAndOutput *= 2; 
}

如上所述,重要的是一致性,这将防止比任何特定约定更多的错误。在协作项目中,遵循现有惯例通常是值得的。

于 2013-08-17T02:24:39.050 回答