总结:如果您声明一个具有相同名称的 struct
和一个 class
会发生什么。
详细信息:
我正在审查一些代码,我看到了这样的警告:
warning: struct 'foo' was previously declared as a class
在用 clang 编译时,还有几个地方 clang 添加了注释:
foo.h:29:1: note: did you mean struct here?
class foo;
^~~~~
struct
显然,让结构体和类同名并不是一个好的编码习惯。看起来发生的事情是开发人员正在编写他自己的类并使用了一个已经在他包含的另一个文件中使用的名称,但他没有注意到这一点。
但是,我的问题是编译器能否区分声明为 class foo
的变量和声明为 struct foo
的变量?
编辑:
实际上发生的事情是开发人员在他创建的 class bar
中使用 class foo
。我认为与此同时声明 class foo
的地方已更改为 struct bar
。这就是编译代码的原因。所以我想我的问题的答案是 struct
和 class
在声明对象时可以互换。我仍然认为始终如一地使用它们是个好主意。
最佳答案
关键字 struct
和 class
在很大程度上是可以互换的。
即使你写了 struct Foo
,你也创建了一个 class 类型
名称为 Foo
。并且该名称在其范围内必须是唯一的
范围(出于 C 兼容性的原因,有一个特殊的异常(exception),
但最好忽略它)。
关于c++ - 创建同名的结构和类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16220577/