use*_*514 62 c++ coding-style function naming-conventions
在C++中命名函数的惯例是什么?
我来自Java环境所以我通常命名为:
myFunction(...) {
}
Run Code Online (Sandbox Code Playgroud)
我在C++中看过混合代码,
myFunction(....)
MyFunction(....)
Myfunction(....)
Run Code Online (Sandbox Code Playgroud)
什么是正确的方法?
另外,对于类方法还是非类方法,它是一样的吗?
int*_*nt3 40
没有'正确的方法'.虽然有一些约定,但它们在语法上都是正确的.你可以按照谷歌风格指南,虽然还有其他人.
来自上述指南:
常规功能有大小写; 访问器和mutator匹配变量的名称:MyExcitingFunction(),MyExcitingMethod(),my_exciting_member_variable(),set_my_exciting_member_variable().
eml*_*lai 38
由于C++ 11,您可能需要为使用snake_case或camelCase 用于函数名.
这是因为要使类在基于范围的for循环中作为range-expression运行,您必须为该类定义调用begin和end(区分大小写)的函数.
因此,使用例如PascalCase函数名称意味着如果您需要使用基于范围的类来处理类,则必须打破项目中的命名一致性.
Don*_*nie 27
我见过的大多数代码都是camelCase函数(小写首字母),ProperCase/PascalCase类名和(最常见的)snake_case变量.
但是,说实话,这只是指导.最重要的是在整个代码库中保持一致.选择看似自然/适合你的东西,并坚持下去.如果您正在加入正在进行的项目,请遵循他们的标准.
Ste*_*ith 16
我在生产代码中看到的最常见的是(按此顺序):
myFunctionName // lower camel case
MyFunctionName // upper camel case
my_function_name // K & R ?
Run Code Online (Sandbox Code Playgroud)
我发现程序员在C++代码中使用的命名约定通常与他们的编程背景有关.
例如,前java程序员倾向于使用较低的驼峰案例来实现功能
Tof*_*eer 11
如果你看一下标准库,模式通常是my_function,但每个人似乎都有自己的方式: - /
就个人而言,我更喜欢thisStyle到ThisStyle的功能.这真的是为了个人品味,可能受Java影响,但我非常喜欢功能和类看起来不同.
但是,如果我不得不争论它,我会说这种区别不仅仅是审美.当你遇到临时的功能式构造时,它会节省一点点思考.与此相反,您可以认为无论是否Foo(1,2,3)是函数调用实际上并不重要- 如果它是构造函数,那么它的行为就像一个函数返回Foo的值.
该约定还避免了C++继承的函数 - 同名 - 一个类不是错误的惨败,因为C有一个单独的标记命名空间:
#include <iostream>
struct Bar {
int a;
Bar() : a(0) {}
Bar(int a) : a(a) {}
};
struct Foo {
Bar b;
};
int Bar() {
return 23;
}
int main() {
Foo f;
f.b = Bar();
// outputs 23
std::cout << f.b.a << "\n";
// This line doesn't compile. The function has hidden the class.
// Bar b;
}
Run Code Online (Sandbox Code Playgroud)
毕竟,Bar既是名词又是动词,因此可以合理地定义为一个地方的一个阶级和另一个地方的一个功能.显然,有更好的方法可以避免冲突,例如正确使用命名空间.正如我所说,实际上,这只是因为我更喜欢具有小写首字母的函数外观,而不是因为实际上需要将它们与类区分开来.
与Java不同,C++没有"标准样式".我曾经工作的几乎所有公司都有自己的C++编码风格,大多数开源项目也都有自己的风格.您可能需要查看的一些编码约定:
值得注意的是,C++编码标准通常会指定语言的哪些部分不使用.例如,Google C++样式指南中说"我们不使用C++异常".我工作过的几乎所有地方都禁止使用C++的某些部分.(一个地方我的工作基本上是说,"在C程序,但new并delete是没关系"!)