【发布时间】:2009-11-23 14:31:39
【问题描述】:
在 C++ 类声明中:
class Thing
{
...
};
为什么我必须包含分号?
【问题讨论】:
-
这些很难回答,伙计们。
标签: c++
在 C++ 类声明中:
class Thing
{
...
};
为什么我必须包含分号?
【问题讨论】:
标签: c++
完整的语法本质上是
类名{成分}实例;
其中“constituents”是类元素和方法的序列,“instances”是类实例(即对象)的逗号分隔列表。
例子:
class FOO {
int bar;
int baz;
} waldo;
同时声明 FOO 类和一个对象 waldo。
实例序列可能为空,在这种情况下,您只需
class FOO {
int bar;
int baz;
};
你必须把分号放在那里,这样编译器才会知道你是否声明了任何实例。
这是一个 C 兼容性问题。
【讨论】:
class { } waldo; 是合法的。
因为你可以选择声明对象
class Thing
{
...
}instanceOfThing;
历史原因
【讨论】:
帮助您记住分号放置位置的好规则:
命名空间也不需要尾随分号,因为它们可以包含上述两者的混合(因此可以包含代码,因此不需要分号)。
【讨论】:
int a,b,c,d;
int main(void) {
struct y {
}; a, b, c, d;
struct x {
} a, b, c, d;
}
两种不同的语句,两种完全不同的含义,都是合法的C/C++,唯一的区别就是struct声明后的;。
语句a, b, c, d; 本身,在这种情况下,只计算a、b、c 和d。在这种情况下,这没有任何作用。
但是,如果它在结构/类定义之后(; 之前),它会创建 4 个已创建结构/类的实例,a、b、c 和 d
【讨论】:
因为它可能是下一个元素的定义。例如,从 C 语法中获取:如果你声明
struct {
...
}
main (int argc, char..
然后它假定 main 返回一个结构。如果有分号,
struct {
...
};
main (int argc, char..
然后main 返回一个整数。
【讨论】:
因为语言语法是这么说的……
【讨论】: