C ++中命名函数的约定是什么?
我来自Java环境,因此我通常会这样命名:
myFunction(...) {
}
我看过C ++中的混合代码,
myFunction(....)
MyFunction(....)
Myfunction(....)
正确的方法是什么?
另外,类方法和非类方法是否都一样?
C ++中命名函数的约定是什么?
我来自Java环境,因此我通常会这样命名:
myFunction(...) {
}
我看过C ++中的混合代码,
myFunction(....)
MyFunction(....)
Myfunction(....)
正确的方法是什么?
另外,类方法和非类方法是否都一样?
snake_case
,camelCase
因为在函数名称中有首字母缩略词的情况下(例如,您具有解析XML数据的函数),我发现parse_xml_data
它比parseXMLData
...更具可读性。使用时,XML和Data似乎变成一个单词camelCase
parseXmlData
Answers:
没有“正确的方法”。尽管有一些约定,但它们在语法上都是正确的。您可以按照Google样式指南进行操作,尽管还有其他方法。
从说的指南:
常规功能混合大小写;访问器和更改器匹配变量的名称:MyExcitingFunction(),MyExcitingMethod(),my_exciting_member_variable(),set_my_exciting_member_variable()。
for
-loop一起使用,则必须定义称为begin
和的函数end
。C ++不支持PascalCase
此功能。
main
位于中lowerCamelCase
,因此我至少要对全局函数名称进行投票。
如果看标准库,模式通常是my_function,但是每个人似乎都有自己的方式:-/
underscore_style
名称。使用下划线分隔名称的一部分是C和C ++的原始样式,并在C ++标准库中使用。该规则是默认值,仅在您有选择时使用通常,您别无选择,必须遵循既定风格来保持一致性。一致性的要求胜过个人品味。这是对您没有约束或更好的主意的建议。” 见github.com/isocpp/CppCoreGuidelines/blob/master/...
就个人而言,我更喜欢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;
}
毕竟,酒吧既是名词又是动词,因此可以合理地在一个地方将其定义为类,在另一个地方将其定义为函数。显然,有避免冲突的更好方法,例如正确使用名称空间。就像我说的,确实是因为我更喜欢使用小写首字母的功能,而不是因为实际上有必要将它们与类区分开来。
与Java不同,C ++没有“标准样式”。我曾经工作过的几乎所有公司都具有自己的C ++编码风格,并且大多数开源项目也都具有自己的风格。您可能需要查看一些编码约定:
有趣的是,C ++编码标准通常会指定不使用语言的哪些部分。例如,《 Google C ++样式指南》说“我们不使用C ++例外”。我工作过的几乎所有地方都禁止使用C ++的某些部分。(一个地方我的工作基本上是说,“在C程序,但new
并delete
是没关系”!)
Foo *foo = new Foo;
而不是Foo *foo = malloc(sizeof(Foo)); assert(foo);
;-)
-std=c89 -pedantic
他们实际上可以将其验证为C89,它将在C编译器中运行,而不是C ++,这可能不。如果他们想这样拼命地键入“新”和“删除”,使用几个宏(当然你需要额外的括号:delete(new(TYPE));
不是delete new TYPE;
。
正如其他人所说,C ++中没有这样的东西。话虽如此,我倾向于使用编写标准库的样式-K&R。