C++ 你会推荐C++;Todd Hoff的编码标准?

C++ 你会推荐C++;Todd Hoff的编码标准?,c++,coding-style,C++,Coding Style,哈罗 目前我正在寻找一个好的C++编码标准,我可以坚持下去。在互联网上我可以找到很多编码标准。有些规则在大多数情况下都很常见。但也存在差异。 我发现Todd Hoff()的C++编码标准。我看了一眼,发现它真的很棒。他不仅给出了一些常见的规则,而且还深入探讨了细节。名称约定就是一个很好的例子 我想知道,如果有人使用这个C++编码标准,他会建议使用它吗? < P>快速浏览一下,在大多数情况下它看起来都很好。有一件事引起了我的注意,那就是我并不真正同意他在书中提出的一些命名约定,但是有一种一致的命名

哈罗

目前我正在寻找一个好的C++编码标准,我可以坚持下去。在互联网上我可以找到很多编码标准。有些规则在大多数情况下都很常见。但也存在差异。 我发现Todd Hoff()的C++编码标准。我看了一眼,发现它真的很棒。他不仅给出了一些常见的规则,而且还深入探讨了细节。名称约定就是一个很好的例子


我想知道,如果有人使用这个C++编码标准,他会建议使用它吗?

< P>快速浏览一下,在大多数情况下它看起来都很好。有一件事引起了我的注意,那就是我并不真正同意他在书中提出的一些命名约定,但是有一种一致的命名方式的概念已经过时了


您可能希望看到的另一个资源是C++编码标准:101个规则、指南和萨特和Andrei Alexandrescu的最佳实践。它不像Todd Hoff的那样具体,但它确实提供了更多关于为什么特定规则应该成为编码标准的一部分的讨论。

快速浏览一下,它在大多数方面看起来都不错。有一件事引起了我的注意,那就是我并不真正同意他在书中提出的一些命名约定,但是有一种一致的命名方式的概念已经过时了

您可能希望看到的另一个资源是C++编码标准:101个规则、指南和萨特和Andrei Alexandrescu的最佳实践。它不像托德·霍夫的那样具体,但它确实提供了更多关于为什么特定规则应该成为编码标准一部分的讨论。

关于霍夫:

可怕的命名约定
命名约定非常不标准。在我研究过的大多数地方和大多数约定中,成员函数和成员数据都遵循相同的规则:都是小写,单词之间用下划线分隔

这些首字母大写的标识符很难读取,即使是视力正常的人。关于这一点,已有多种人为因素研究。用大写字母分隔的单词对人们来说更难阅读,也就是用下划线分隔的单词。对于视力受损的人来说,使用首字母大写比一文不值更糟糕。在我所影响的编码标准中,InitialCaps用于类名,并且仅用于类名

所有大写字母比大写字母更难阅读。每一份法律合同都有一些真正重要的法律条款,律师们希望我们能够加以掩饰和忽略。那些重要的条款很容易找到:它们都是大写的。对于视力正常的人来说,所有大写字母的文字都极难阅读。这就是为什么律师喜欢使用它。我们应该尽可能避免所有的上限。仅为宏保留所有的\u大写,并且永远不要定义一个不是所有\u大写的宏。这将最大限度地减少前处理器名称和标识符之间的冲突

匈牙利符号很糟糕,即使它只是部分使用

i
这些标准违反了RAII。也就是说(我的重点):

不要在对象的构造函数中做任何实际工作。在构造函数内部,只初始化变量和/或只执行不能失败的操作。为完成构造的对象创建Open()方法。应该在对象实例化之后调用Open()

关于析构函数的非常糟糕的建议
关于析构函数的建议和关于构造函数的建议一样糟糕

在析构函数中抛出异常时要小心

真的吗?“不要在析构函数中抛出异常”怎么样

本节的更多内容

必须特别注意捕获对象销毁期间可能发生的异常。还必须特别注意在对象抛出异常时完全销毁该对象

到底有人会怎么做?简单的答案是正确的:不要在析构函数中抛出异常。永远

这真是太可怕了

/////////////////////////////// PUBLIC ///////////////////////////////////////

//============================= LIFECYCLE ====================================

XX::XX()
{
}// XX

XX::XX(const XX&)
{
}// XX

XX::~XX()
{
}// ~XX


//============================= OPERATORS ====================================

XX& 
XX::operator=(XX&);
{
   return *this;

}// =

//============================= OPERATIONS ===================================
//============================= ACESS      ===================================
//============================= INQUIRY    ===================================
/////////////////////////////// PROTECTED  ///////////////////////////////////

/////////////////////////////// PRIVATE    ///////////////////////////////////
那个愚蠢的(6==errorNum)垃圾
我讨厌那种结构。它很丑,把马放在马车前面。这里正确的做法是要求代码在墙下或更严格的条件下编译,并使用代码分析器捕获编译器无法/不会发现的其他问题。不要强迫我写东西,因为二十年前有个白痴写了
if(errorNum=6)…

布尔类型的公牛
本节的标题是正确的:它是公牛。他写的东西既过时又错误。如果您正在编写新代码,请使用bool。如果您正在维护旧代码,除非需要更改,否则不要更改它

他建议不要把布尔值和真值作比较,这是正确的。解决方案不是将布尔值与false进行比较(如果(false!=func())…,则更糟的是
)。解决方法不是将布尔值与任何东西进行比较:
if(func())…

这个标准的问题一直存在。
所以不要使用它。

关于霍夫:

可怕的命名约定
命名约定非常不标准。在我研究过的大多数地方和大多数约定中,成员函数和成员数据都遵循相同的规则:都是小写,单词之间用下划线分隔

这些首字母大写的标识符很难读取,即使是视力正常的人。关于这一点,已有多种人为因素研究。用大写字母分隔的单词对人们来说更难阅读,也就是用下划线分隔的单词。对于视力受损的人来说,使用首字母大写比一文不值更糟糕。在我所影响的编码标准中,InitialCaps用于类名,并且仅用于类名

所有大写字母比大写字母更难阅读。每一份法律合同都有一些真正重要的法律条款,律师们希望我们能够加以掩饰和忽略。那些重要的