}之间的差异;以及在C++中的}
Difference between }; and } in C++
C++的全新功能。
在一个项目中为一项任务而苦恼,在一些示例代码中,我发现了以}结尾的方法;而不是典型的(预期的)}
例如:
CircBuffer::CircBuffer()
{
cout<<"constructor calledn";
cout<<"Buffer has " << BufferSize << "elementsn";
for (int i = 0; i<= BufferSize -1; i++)
{
Buffer[i] = 0;
}
ReadIn = WriteIn = 0;
setDelay(0);
}; // <=== HERE
我找不到任何关于为什么要在网上这样做的信息。
谢谢,Lewis
命名空间范围中的尾随;
构成空声明。上面代码中的内容被编译器视为
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
};
(在这种情况下,可选的;
实际上是成员定义的一部分,这意味着该定义确实以};
结束,并且不会引入空声明。)
当你在实际代码中看到这样的东西时,这可能只是一个坏习惯,可能是基于类内和类外定义上下文之间的混淆。
可能是为了一致性,也可能是旧代码的回忆,例如,如果原始代码只是一个声明:
CircBuffer::CircBuffer();
如果有人想添加一个内联实现,他可能会在后面的;
之前单击,并开始在那里编写正文,忘记删除;
。
相关文章:
- 将成员变量添加到共享库中的类中,不会破坏二进制兼容性吗
- .cpp和.h文件中的模板专用化声明
- 反向给定链表中的K节点
- 正在查找文档以获得PS4平台的C++中的设备信息
- enum是C++中的宏变量还是整数变量
- 使用C++库在Android项目中修改gradle中的cmake参数,用于插入指令的测试
- 将字符串存储在c++中的稳定内存中
- 文本文件中的单词链表
- 递归函数计算序列中的平方和(并输出过程)
- 如何从C++中的依赖类型中获得它所依赖的类型
- C++中的"inline"关键字
- 如何运行位于boost/libs/python/example/tutorial目录中的hello.cpp和Jamfil
- 如何使用 < 和 > 命令获取 c++ 中的输入和输出?
- 用C++中的一个变量定义一个常量
- vector.resize()中的分配错误
- 使用指针从C++中的数组中获取最大值
- arr[-1]在c++中的奇怪行为
- 具有奇怪重复模板模式的派生类中的成员变量已损坏
- 将值指定给向量(2D)的向量中的某个位置
- 内置函数可查看CPP中的成员变量