没找着怎么对文件进行命名的规则 稍微参考下其他的文档和google c++ style
小写字母+下划线+数字
基本结论是这样
- 注释也搞个空格
- 自定义类型 驼峰 每个首字母大写
- 其他 数字+小写字母+下划线
- 全大写表示宏
- 在声明类时 使用以下顺序
- 类型:类、枚举和别名(使用)
- 构造函数,赋值函数,析构函数
- 功能接口等等函数
- 数据
- 按照 public protect private 的顺序
- 一般private的属性用下划线_结尾 然后提供一个去掉下划线的liline的同名方法
- 传统布局(K&R-derived layout)这种风格通常被称为“Stroustrup”
if 和 ( 有空格。
对每个语句、if的分支和for的主体使用单独的行。
类和结构体的{不在单独的行中,但是函数的{在单独的行中。
将用户定义类型的名称大写,以便与标准库类型区分开来。
不要大写函数名。
- 使用c++风格的声明符布局 就是不要使用c风格
比如返回值 & 应该紧邻类型而不是函数名 - 一次只声明一个变量
-
NL.1: Don’t say in comments what can be clearly stated in code
用代码表达意图 所见即所得 建明司仪 -
NL.2: State intent in comments
注释也搞个空格 -
NL.3: Keep comments crisp
注释要 清晰准确 及时更新 但是这做到不太可能 哈哈 -
NL.4: Maintain a consistent indentation style
保持一致的缩进风格 避免发生一些"愚蠢"的错误 -
NL.5: Avoid encoding type information in names
避免在名称中编码类型信息假设你在名字中有类型信息 后来类型一改动 这名字就显得很尴尬了
Example, bad void print_int(int i); void print_string(const char*); print_int(1); // repetitive, manual type matching print_string("xyzzy"); // repetitive, manual type matching Example, good void print(int i); void print(string_view); // also works on any string-like sequence print(1); // clear, automatic type matching print("xyzzy"); // clear, automatic type matching
-
NL.7: Make the length of a name roughly proportional to the length of its scope
使名称的长度大致与它的作用域的长度成比例范围越大,混淆和意外名称冲突的可能性越大。
Example double sqrt(double x); // return the square root of x; x must be non-negative int length(const char* p); // return the number of characters in a zero-terminated C-style string int length_of_string(const char zero_terminated_array_of_char[]) // bad: verbose int g; // bad: global variable with a cryptic name int open; // bad: global variable with a short, popular name
-
NL.8: Use a consistent naming style
保持一致的命名风格
如果使用第三方库 可以保留三方库的规则下面翻译出来是这样
ISO标准库 仅使用小写字母和数字,用下划线分隔单词
不要使用双下划线
自定义的类型和概念的时候 用大写字母 这就有好几种了
第一种 My_map
第二种 驼峰式 每个单词的首字母大写 (有的惯例首字母大写有的不是)
MyMap
myMap这里个人建议MyMap形式
尽量使用缩写符号与标识符长度保持一致
Example ISO Standard, use lower case only and digits, separate words with underscores: int vector my_map Avoid double underscores __. Example Stroustrup: ISO Standard, but with upper case used for your own types and concepts: int vector My_map Example CamelCase: capitalize each word in a multi-word identifier: int vector MyMap myMap Some conventions capitalize the first letter, some don’t. Note Try to be consistent in your use of acronyms and lengths of identifiers: int mtbf {12}; int mean_time_between_failures {12}; // make up your mind
-
NL.9: Use ALL_CAPS for macro names only
全大写 仅仅 表示宏定义 比如Example void f() { const int SIZE{1000}; // Bad, use 'size' instead int v[SIZE]; } Note This rule applies to non-macro symbolic constants: enum bad { BAD, WORSE, HORRIBLE }; // BAD
-
NL.10: Prefer underscore_style names
使用下划线风格式的名字使用下划线来分隔名称的各个部分是最初的C和c++风格,并在c++标准库中使用。
-
NL.15: Use spaces sparingly
少用空格
太多的空间会使文本变大,分散注意力。
我们认为位置良好的空白对于可读性有很大的帮助。只是别做过头了。 -
NL.11: Make literals readable
使用数字分隔符来避免长串的数字在需要的地方使用后缀
文本不应该作为“神奇的常量”散布在整个代码中,但是让它们在定义的地方具有可读性仍然是一个好主意。
避免魔数Example Use digit separators to avoid long strings of digits auto c = 299'792'458; // m/s2 auto q2 = 0b0000'1111'0000'0000; auto ss_number = 123'456'7890; Example Use literal suffixes where clarification is needed auto hello = "Hello!"s; // a std::string auto world = "world"; // a C-style string auto interval = 100ms; // using <chrono>
-
NL.16: Use a conventional class member declaration order
使用传统的类成员声明顺序在声明类时,使用以下顺序
类型:类、枚举和别名(使用)
构造函数,赋值函数,析构函数
功能接口等等函数
数据
按照 public protect private 的顺序
有时,成员的默认顺序与将公共接口与实现细节分离的愿望相冲突。
在这种情况下,可以使用私有数据放置私有类型和函数。可以理解为将公用函数放入private中
private 按照 types, functions, and data 的顺序避免内容分散在两个public(或其他)块中
Example class X { public: // interface protected: // unchecked function for use by derived class implementations private: // implementation details }; Example Sometimes, the default order of members conflicts with a desire to separate the public interface from implementation details. In such cases, private types and functions can be placed with private data. class X { public: // interface protected: // unchecked function for use by derived class implementations private: // implementation details (types, functions, and data) }; Example, bad Avoid multiple blocks of declarations of one access (e.g., public) dispersed among blocks of declarations with different access (e.g. private). class X { // bad public: void f(); public: int g(); // ... };
-
NL.17: Use K&R-derived layout
这是原始的C和c++布局。它很好地保留了垂直空间。它很好地区分了不同的语言结构(例如函数和类)。请注意
在c++环境中,这种风格通常被称为“Stroustrup”。if 和 ( 有空格。
对每个语句、if的分支和for的主体使用单独的行。
类和结构体的{不在单独的行中,但是函数的{在单独的行中。
将用户定义类型的名称大写,以便与标准库类型区分开来。
不要大写函数名。
-
NL.18: Use C+±style declarator layout
使用c++风格的声明符布局
就是不要使用c风格
比如返回值 & 应该紧邻类型而不是函数名T& operator[](size_t); // OK T &operator[](size_t); // just strange T & operator[](size_t); // undecided
-
NL.19: Avoid names that are easily misread
避免搞一些容易让人误解的名字int oO01lL = 6; // bad int splunk = 7; int splonk = 8; // bad: splunk and splonk are easily confused
-
NL.20: Don’t place two statements on the same line
不要一行有两个声明语句 就不解释了 这明显很容易忽略 -
NL.21: Declare one name (only) per declaration
每次仅声明一个名称 避免混淆 -
NL.25: Don’t use void as an argument type
不要使用void作为参数类型它很冗长,只在C兼容性重要的地方才需要。
-
NL.26: Use conventional const notation
使用传统的常量表示法Example const int x = 7; // OK int const y = 9; // bad const int *const p = nullptr; // OK, constant pointer to constant int int const *const p = nullptr; // bad, constant pointer to constant int