简介:如果声明a struct和a class具有相同的名称会发生什么.
细节:
我正在审查一些代码,我看到了这样的警告:
warning: struct 'foo' was previously declared as a class
Run Code Online (Sandbox Code Playgroud)
在用clang编译时,还有几个地方clang添加了注释:
foo.h:29:1: note: did you mean struct here?
class foo;
^~~~~
struct
Run Code Online (Sandbox Code Playgroud)
显然,拥有一个结构和一个具有相同名称的类不是一个好的编码实践.看起来发生的事情是开发人员正在编写他自己的类,并使用了一个已经在他包含的另一个文件中使用的名称,他没有注意到.
但是,我的问题是编译器是否能够区分声明为的变量class foo和那些变量struct foo?
编辑:
实际上发生的事情是开发人员正在使用他创建class foo的class bar那个.我认为在此期间class foo宣布的地方已改为a struct bar.这就是代码编译的原因.所以我想我的问题的答案是,struct并且class在声明对象时可以互换.我仍然认为一直使用它们是个好主意.
关键字struct和class在很大程度上是可以互换的.即使你写了struct Foo,你也创建了一个名为的类类型Foo.并且该名称在其范围内必须是唯一的(出于C兼容性的原因有特殊例外,但最好忽略它).