c++ - 创建同名的结构和类

标签 c++

总结:如果您声明一个具有相同名称的 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。这就是编译代码的原因。所以我想我的问题的答案是 structclass 在声明对象时可以互换。我仍然认为始终如一地使用它们是个好主意。

最佳答案

关键字 structclass 在很大程度上是可以互换的。 即使你写了 struct Foo,你也创建了一个 class 类型 名称为 Foo。并且该名称在其范围内必须是唯一的 范围(出于 C 兼容性的原因,有一个特殊的异常(exception), 但最好忽略它)。

关于c++ - 创建同名的结构和类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16220577/

相关文章:

c++ - 为什么不能将模板引用类型用作模板类型别名参数?

java - 无法从 JNI 设置 Java int 数组字段

.net - map 和字典的实现差异

c++ - 使用标准 C++98/03 干净地分配和构建一个对象

C++ 函数调用缺少参数列表;使用 '&Runner::runTask' 创建指向成员的指针

c++ - CCSprite 在 COCOS2dx 中不作为物理体?

c++ - 我可以解释以下代码中的几行吗?

c++ - CWinApp::OpenDocumentFile 创建一个新窗口

c++ - 使用固定内核进行多次迭代的膨胀/腐 eclipse 是否类似于具有更大尺寸的等效内核的膨胀/腐 eclipse

c++ - 从 type_id_with_cv<>()::pretty_name() 移除命名空间