对于C++中的变量,方法等,有什么好的命名约定?

nac*_*o4d 58 c++ naming-conventions

我来自Objective-C和Cocoa世界,那里有很多常规,许多人会说它让你的代码变得美丽!现在用C++编程我找不到像C++这样的好文档.

http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CodingGuidelines/CodingGuidelines.html

标准C++可能没有上面的内容,但我希望我可以坚持使用其他一些SDK或API(如Microsoft的(?)等)约定.

我希望你能给我一些链接.

GMa*_*ckG 88

做任何你想做的事,只要它最小,一致,并且不违反任何规则.

就个人而言,我发现Boost风格最简单; 它与标准库匹配(给代码提供统一的外观)并且很简单.我个人分别为成员和参数添加前缀mp前缀,给出:

#ifndef NAMESPACE_NAMES_THEN_PRIMARY_CLASS_OR_FUNCTION_THEN_HPP
#define NAMESPACE_NAMES_THEN_PRIMARY_CLASS_OR_FUNCTION_THEN_HPP

#include <boost/headers/go/first>
#include <boost/in_alphabetical/order>
#include <then_standard_headers>
#include <in_alphabetical_order>

#include "then/any/detail/headers"
#include "in/alphabetical/order"
#include "then/any/remaining/headers/in"
// (you'll never guess)
#include "alphabetical/order/duh"

#define NAMESPACE_NAMES_THEN_MACRO_NAME(pMacroNames) ARE_ALL_CAPS

namespace lowercase_identifers
{
    class separated_by_underscores
    {
    public:
        void because_underscores_are() const
        {
            volatile int mostLikeSpaces = 0; // but local names are condensed

            while (!mostLikeSpaces)
                single_statements(); // don't need braces

            for (size_t i = 0; i < 100; ++i)
            {
                but_multiple(i);
                statements_do();
            }             
        }

        const complex_type& value() const
        {
            return mValue; // no conflict with value here
        }

        void value(const complex_type& pValue)
        {
            mValue = pValue ; // or here
        }

    protected:
        // the more public it is, the more important it is,
        // so order: public on top, then protected then private

        template <typename Template, typename Parameters>
        void are_upper_camel_case()
        {
            // gman was here                
        }

    private:
        complex_type mValue;
    };
}

#endif
Run Code Online (Sandbox Code Playgroud)

那.(就像我在评论中已经说过了,千万不能采用谷歌风格指南为您的代码,除非它是无关紧要的命名约定的东西.)

  • 嘿! 你潜入支撑式的偏好!就个人而言,我更喜欢使用大括号,即使是单行语句,也很容易搞砸缩进(当人们无意中使用另一个标签/空格设置进行编辑时)和大括号使范围明显,因此您不必怀疑是否以下线是否属于块或不... (48认同)
  • 我同意Matthieu的观点.总是使用牙套!! 当我年轻和天真时,我讨厌括号,我认为我的编码杂乱无章.现在,当我年纪更大,更聪明的时候,我依旧遵守规则,总是让我的意图变得清晰.将支撑放在单行周围是这样做的一部分. (5认同)
  • @Matthieu:哈,我不会错过这个机会。:) 我过去总是虔诚地捍卫戴牙套,但现在我发现省略它们更干净。(通常单个语句是“return;”或一些微不足道的东西)。 (2认同)
  • 我一直在寻找有关 Boost 命名约定的文档,但只能找到这个:http://www.boost.org/development/requirements.html 您是通过使用它还是阅读了一些东西来学习它的? (2认同)

Mat*_* M. 27

可能存在与个体一样多的命名约定,辩论与使用哪种支撑样式等无穷无尽(并且无菌).

所以我会有两个建议:

  • 一致的项目中
  • 不要使用保留标识符(带有两个下划线或以下划线开头后跟大写字母的任何内容)

剩下的由你决定.

  • +为"一致"; 这是该地段唯一最重要的规则(也是唯一一个你可能会让每个人都同意的规则). (18认同)
  • +1保留标识符,只是编译器现在不使用它并不意味着下一个版本不会 (2认同)

Phi*_*ipp 18

我实际上经常使用Java样式:PascalCase用于类型名称,camelCase用于函数和变量,CAPITAL_WORDS用于预处理器宏.我更喜欢Boost/STL约定,因为你没有后缀类型_type.例如

Size size();
Run Code Online (Sandbox Code Playgroud)

代替

size_type size();   // I don't like suffixes
Run Code Online (Sandbox Code Playgroud)

这具有StackOverflow代码格式化程序识别Size为类型名称的额外好处;-)


mis*_*tor 12

我们遵循本页列出的准则:C++编程风格指南


我还建议您阅读Misfeldt等人的"C++ Style的元素",这是一本关于这个主题的优秀书籍.


Nem*_*vic 7

对于它的价值,C++的原作者Bjarne Stroustrup有他自己喜欢的风格,在这里描述:http://www.stroustrup.com/bs_faq2.html