gpt4 book ai didi

c++ - }; 之间的区别和 } 在 C++ 中

转载 作者:太空狗 更新时间:2023-10-29 19:48:23 25 4
gpt4 key购买 nike

全新的 C++。

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

例如:

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()
{
...
} // <- the `CircBuffer::CircBuffer` definition ends here

; // <- an empty declaration that declares nothing

即从编译器的角度来看,方法定义并不真正以 }; 结尾。它以 结尾,; 被完全分开和独立对待。

空声明在 C++ 的原始版本和 C++03 中是非法的,但在 C++11 中是合法的。因此,您上面引用的代码在 C++98 和 C++03 中无效,但在 C++11 中合法。然而,即使是 C++98 编译器也经常支持空声明作为非标准扩展。

请注意,以上仅适用于类外函数定义(如您的示例)。对于类内成员函数定义,尾随 ; 始终是合法的(并且是可选的)

class C
{
C()
{
...
}; // <- ';' not required, but legal even in C++98
};

(在这种情况下,可选的 ; 实际上是成员定义的一部分,这意味着该定义确实以 }; 结尾,并且不会引入空声明。 )

当你在实际代码中看到类似的东西时,这可能只是一个坏习惯,可能是基于类内和类外定义上下文之间的混淆。

关于c++ - }; 之间的区别和 } 在 C++ 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26258710/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com