}之间的区别;在C中
发布时间:2020-12-16 10:10:30 所属栏目:百科 来源:网络整理
导读:全新的C. 在一个项目上进行分配,在一些示例代码中,我找到了以}结尾的方法;而不是典型的(预期的)} 例如: CircBuffer::CircBuffer(){ cout"constructor calledn"; cout"Buffer has " BufferSize "elementsn"; for (int i = 0; i= BufferSize -1; i++) { Buf
全新的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 我找不到任何关于为什么要在网上完成的信息. 谢谢,刘易斯 解决方法
那个尾随;在命名空间范围内构成一个空声明.编译器将上述代码中的内容视为
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 }; (在这种情况下,optional;实际上是成员定义的一部分,意味着定义确实以}结尾;并且不引入空声明.) 当你在实际代码中看到类似的东西时,它可能只是一个坏习惯,可能是基于类内和类外定义上下文之间的混淆. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |