c++老爹介绍的命名和布局书写规范

其实都来自这里 这文档里面的东西多的不得了 有空自己看吧

没找着怎么对文件进行命名的规则 稍微参考下其他的文档和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
    
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值