Sma*_*acL 74 c++ oop class declaration
事先道歉可能是一个愚蠢的问题,但在C++类中,为什么在结束后的分号呢?我经常忘记它并得到编译器错误,因而浪费时间.对我来说似乎有些多余,这种情况不太可能发生.人们真的做的事情
class MyClass
{
.
.
.
} MyInstance;
Run Code Online (Sandbox Code Playgroud)
编辑:我从结构和枚举的C兼容性角度得到它,但由于类不是C语言的一部分,我想主要是在类似的声明构造之间保持一致性.我想要的是与设计原理更相关,而不是能够改变任何东西,尽管一个好的代码完成IDE可能会在编译之前捕获它.
Nat*_*han 60
所述链接由@MichaelHaren提供似乎提供的根本原因.分号(正如其他人指出的那样)是从C继承的.但这并不能解释为什么C首先使用它.讨论包括一个例子的宝石:
struct fred { int x; long y; };
main()
{
return 0;
}
Run Code Online (Sandbox Code Playgroud)
除非另有声明,否则较旧版本的C具有函数的隐式int返回类型.如果我们省略;结构定义的末尾,我们不仅要定义一个新类型fred,还要声明main()将返回一个实例fred.即代码将被解析如下:
struct fred { int x; long y; } main()
{
return 0; /* invalid return type, expected fred type */
}
Run Code Online (Sandbox Code Playgroud)
Jar*_*Par 43
语言需要类型声明中右括号后的分号.从最早的C版本开始就是这样.
是的,人们确实做了你刚刚提出的声明.它对于在方法内创建范围类型很有用.
void Example() {
struct { int x; } s1;
s1.x = 42;
struct ADifferentType { int x; };
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我认为很清楚为什么需要分号.至于为什么在头文件中声明的更一般情况下需要它,我不确定.我的猜测是,这是历史性的,并且使编写编译器更容易.
unw*_*ind 17
我想这是因为类是声明,即使它们需要大括号进行分组.是的,有一个历史论点,因为在C中你可以做到
struct
{
float x;
float y;
} point;
Run Code Online (Sandbox Code Playgroud)
你应该在C++中能够做类似的事情,class声明以相同的方式行事是有道理的.
Ste*_*ger 10
它的缩写
class MyClass
{
.
.
.
};
// instance declaration
MyClass MyInstance; // semicolon here
Run Code Online (Sandbox Code Playgroud)
类声明的花括号之后的分号实际上是矫枉过正,但它是如何定义C++的.变量声明后的分号总是需要并且有意义.
我不使用此类声明
class MyClass
{
.
.
.
} MyInstance;
Run Code Online (Sandbox Code Playgroud)
但是在这种情况下,我可以理解为什么分号在那里。
因为就像int a;-变量声明。
可能是为了保持一致性,您可以省略“ MyInstance”分号。
| 归档时间: |
|
| 查看次数: |
34684 次 |
| 最近记录: |