跳转至内容
  • 版块
  • 最新
  • 标签
  • 热门
  • Online Tools
  • 用户
  • 群组
折叠
品牌标识

D2Learn Forums

  1. 主页
  2. SubForums
  3. 现代C++ | mcpp论坛
  4. MC++编码风格探讨 - 标识符命名风格

MC++编码风格探讨 - 标识符命名风格

已定时 已固定 已锁定 已移动 现代C++ | mcpp论坛
cpp现代c++编码风格mcpp-style-ref
6 帖子 3 发布者 56 浏览
  • 从旧到新
  • 从新到旧
  • 最多赞同
登录后回复
此主题已被删除。只有拥有主题管理权限的用户可以查看。
  • sunrisepeakS 离线
    sunrisepeakS 离线
    sunrisepeak d2learn-dev
    编写于 最后由 编辑
    #1
    • https://github.com/mcpp-community/mcpp-style-ref
    import std;
    
    namespace mcpplibs {  // 1.命名空间全小写
    
    class StyleRef { // 2.类型名大驼峰
    
    private:
        int data_; // 3.私有数据成员 xxx_
        std::string fileName_; // std::string
    
    public: // 4. 构造函数 / Rule of Five(Big Five)单独放一个 public 区域
    
        StyleRef() { }
        StyleRef(const StyleRef &obj) { /* ... */ }
        StyleRef(StyleRef &&) { /* ... */ }
        StyleRef & operator=(const StyleRef &) { /* ... */ }
        StyleRef & operator=(StyleRef &&) { /* ... */ }
        ~StyleRef() { /* ... */ }
    
    public: // 5.公有函数区域
    
        // 函数名 下划线分割 / snake_case
        /* 7. fileName 小驼峰 */
        void load_config_file(std::string fileName) {
            // 成员函数如无特殊要求接口和实现不分离
            parse_(fileName);
        }
    
    private:
    
        // 6.私有成员函数以 `_` 结尾
        void parse_(std::string config) {
    
        }
    
    };
    
    }
    

    • 一、标识符命名风格
      • 1.0 类型名 - 大驼峰
      • 1.1 对象/数据成员 - 小驼峰
      • 1.2 函数 - 下划线(snake_case)
      • 1.3 私有表示 - _后缀
      • 1.4 其他
    1 条回复 最后回复
    1
    • SkyWingFS 离线
      SkyWingFS 离线
      SkyWingF
      编写于 最后由 编辑
      #2

      对于编码风格比如类型别名统一用using关键字,除非导出C库使用typedef;
      类型别名最好放在命名空间内,或者类作用域内或者函数内;
      try catch别用或只用在程序的致命性问题,错误码和错误信息字符串还是广泛使用的;
      函数传参尽量多使用引用,在语法层面解决访问野指针的问题,想要优化参数构造或返回值为类的对象一般就用右值引用;
      在可以的情况下,类尽量都实现classname& operator=(右值引用){......};
      类最好不要可以定义强制类型转换函数,还是函数更好理解一点;
      类最好保留一个空实现的构造函数,或者只限于把所有的成员变量都初始化为0......;
      对于类成员有指针并且明确申请堆内存的最好用智能指针,要么自行管理好生命周期;

      sunrisepeakS 1 条回复 最后回复
      0
      • SkyWingFS 离线
        SkyWingFS 离线
        SkyWingF
        编写于 最后由 编辑
        #3

        模板类尽量实例化常用的类型,以便减少编译时间;
        模板类或模板函数尽量限制能传入的参数类型,本质上模板做的就是函数重载的事;
        如果是某些数据转换或者方便后期维护,尽量还是用命名空间内的内联函数定义或尽量在编码早期就确定下来,少使用魔法宏......对于#define WINAPI __stdcall, #define TRY try{, #define END_TRY }, #define MAX(...) ......,还是比较痛恨的;
        如果不兼容以前版本的c++,尽量不要对关键字使用宏(毕竟c++或者c来说对于关键字的更改基本都很少);
        函数尽量加上属性一类的定义比如[[nodiscard]], [[deprecated]]等;

        johanvxJ 1 条回复 最后回复
        0
        • johanvxJ 离线
          johanvxJ 离线
          johanvx
          回复了SkyWingF 最后由 编辑
          #4

          @SkyWingF 在 MC++编码风格探讨 - 标识符命名风格 中说:

          模板类尽量实例化常用的类型,以便减少编译时间;
          模板类或模板函数尽量限制能传入的参数类型,本质上模板做的就是函数重载的事;
          如果是某些数据转换或者方便后期维护,尽量还是用命名空间内的内联函数定义或尽量在编码早期就确定下来,少使用魔法宏......对于#define WINAPI __stdcall, #define TRY try{, #define END_TRY }, #define MAX(...) ......,还是比较痛恨的;
          如果不兼容以前版本的c++,尽量不要对关键字使用宏(毕竟c++或者c来说对于关键字的更改基本都很少);
          函数尽量加上属性一类的定义比如[[nodiscard]], [[deprecated]]等;

          @SkyWingF 在 MC++编码风格探讨 - 标识符命名风格 中说:

          对于编码风格比如类型别名统一用using关键字,除非导出C库使用typedef;
          类型别名最好放在命名空间内,或者类作用域内或者函数内;
          try catch别用或只用在程序的致命性问题,错误码和错误信息字符串还是广泛使用的;
          函数传参尽量多使用引用,在语法层面解决访问野指针的问题,想要优化参数构造或返回值为类的对象一般就用右值引用;
          在可以的情况下,类尽量都实现classname& operator=(右值引用){......};
          类最好不要可以定义强制类型转换函数,还是函数更好理解一点;
          类最好保留一个空实现的构造函数,或者只限于把所有的成员变量都初始化为0......;
          对于类成员有指针并且明确申请堆内存的最好用智能指针,要么自行管理好生命周期;

          有点 off-topic 了,建议在对应的帖子讨论(暂时可能还没有)

          SkyWingFS 1 条回复 最后回复
          0
          • SkyWingFS 离线
            SkyWingFS 离线
            SkyWingF
            回复了johanvx 最后由 编辑
            #5

            @johanvx 还行吧,我个人对变量,函数等命名还都是能接受的,就是对编码规范还是有点要求的。确实还没见到其他关于代码规范的帖子。

            1 条回复 最后回复
            0
            • sunrisepeakS 离线
              sunrisepeakS 离线
              sunrisepeak d2learn-dev
              回复了SkyWingF 最后由 编辑
              #6

              @SkyWingF 后面给项目增加一个 类似 "最佳实践" 章节总结这些:

              • 类型别名用using 代替 typedef
              • 引用的使用
              • 尽量少使用宏 非必要不使用
              • 属性标识 [[nodiscard]], [[deprecated]]
              • ...
              1 条回复 最后回复
              0

              • 登录

              • 没有帐号? 注册

              • 登录或注册以进行搜索。
              d2learn forums Powered by NodeBB
              • 第一个帖子
                最后一个帖子
              0
              • 版块
              • 最新
              • 标签
              • 热门
              • Online Tools
              • 用户
              • 群组