C++ 差异};和}在C+中+; < /P>

C++ 差异};和}在C+中+; < /P>,c++,methods,C++,Methods,在一个项目上为一个任务工作,在一些示例代码中,我发现了以}结尾的方法;而不是典型的(预期的)} 例如: CircBuffer::CircBuffer() { cout<<"constructor called\n"; cout<<"Buffer has " << BufferSize << "elements\n"; for (int i = 0; i<= BufferSize -1; i++) {

在一个项目上为一个任务工作,在一些示例代码中,我发现了以}结尾的方法;而不是典型的(预期的)}

例如:

CircBuffer::CircBuffer()
{
    cout<<"constructor called\n";
    cout<<"Buffer has " << BufferSize << "elements\n";

    for (int i = 0; i<= BufferSize -1; i++)
    {
        Buffer[i] = 0;
    }

    ReadIn = WriteIn = 0;
    setDelay(0);

}; // <=== HERE
CircBuffer::CircBuffer()
{

cout可能是为了一致性,也可能是让人想起旧代码,例如,如果原始代码只是一个声明:

CircBuffer::CircBuffer();

如果有人想添加一个内联实现,他可能在尾部
之前单击并开始在那里编写主体,忘记删除

,名称空间范围中的尾部
构成一个空声明。编译器将上述代码中的内容视为

CircBuffer::CircBuffer()
{
  ...
}      // <- the `CircBuffer::CircBuffer` definition ends here

;      // <- an empty declaration that declares nothing
(在本例中,可选的
实际上是成员定义的一部分,这意味着定义确实以
};
结尾,并且不引入空声明。)


当您在实际代码中看到类似的内容时,这可能只是一个坏习惯,可能是因为类内和类外定义上下文之间存在混淆。

这是一个空语句。只有类型定义需要分号:
class A{…}函数不是空语句。这就像说“不要执行此行中的任何语句”一样,它可能是一个空语句typo@BeyelerStudios:这不是一个“空语句”。C++不允许在命名空间范围内编写语句。它是一个空声明,这是一个完全不同的东西。@AndreyT你是对的。请注意,C类大括号后的分号不是可选的。
class C
{
  C()
  {
    ...
  }; // <- ';' not required, but legal even in C++98
};