在C ++类声明中:
class Thing
{
...
};
为什么我必须加上分号?
答案 0 :(得分:93)
完整语法基本上是
类NAME {constituents}实例;
其中“constituents”是类元素和方法的序列,“instances”是以逗号分隔的类实例列表(即对象)。
示例:
class FOO {
int bar;
int baz;
} waldo;
声明类FOO和对象waldo。
实例序列可能为空,在这种情况下,您只需要
class FOO {
int bar;
int baz;
};
您必须将分号放在那里,以便编译器知道您是否声明了任何实例。
这是C兼容性的事情。
答案 1 :(得分:17)
因为您可以选择声明对象
class Thing
{
...
}instanceOfThing;
由于历史原因
答案 2 :(得分:3)
因为它可能是下一个元素的定义。例如,从C语法中获取它:如果声明
struct {
...
}
main (int argc, char..
然后它假定main返回一个struct。如果有分号,
struct {
...
};
main (int argc, char..
然后main
返回一个int。
答案 3 :(得分:3)
int a,b,c,d;
int main(void) {
struct y {
}; a, b, c, d;
struct x {
} a, b, c, d;
}
两个不同的陈述,两个完全不同的含义,都是合法的C / C ++,唯一的区别是结构声明后的;
。
在此上下文中,语句a, b, c, d;
本身仅评估a
,b
,c
和d
。在这种情况下,这没有任何作用。
但是,如果它正好在struct / class定义之后(在;
之前),它会创建4个创建的struct / class的实例,a
,b
,{{1} }和c
答案 4 :(得分:2)
因为语言语法是这样说的......
答案 5 :(得分:2)
帮助您记住分号放在哪里的好规则:
命名空间也不需要使用尾随分号,因为它们可以包含上述两者的混合(因此可以包含代码,因此不需要分号)。