[英]'class' keyword in variable definition in C++
在有人问之前,是的,这是家庭作业的一部分,是的,我在问之前做了很多谷歌搜索。 我花了最后一小时在谷歌上搜索了许多不同的关键词,但却找不到任何东西。
所以这里有一个问题:
以下变量定义的含义是什么:
class MyClass* myClass;
?
我尝试使用class MyClass* myClass = new MyClass();
并发现它只是创建一个指向MyClass
的新实例的指针。
那么,使用class
前缀有什么好处? 它有什么不同吗?
有人有关于它的一些资源的链接? 我根本找不到任何东西(除了“类定义”之外,真的很难找到其他东西!)。
非常感谢!
精心设计的类型说明符是一个类型名称,前面是class,struct,enum或union关键字。
class identifier
struct identifier
enum identifier
union identifier
精心设计的类型说明符用于强调,或显示由同一范围内具有相同名称的变量声明隐藏的类型名称。
实际上,在创建类的对象时使用class
是可选的。 在C语言中,必须在struct name前面使用struct
来创建其变量。 因为C ++是C的超集。在C ++中,struct和class之间只有一个区别,那就是访问修饰符。
为了保持向后兼容,允许这样做。
所以,
class MyClass* myClass = new MyClass();
和,
MyClass* myClass = new MyClass();
两者都是一样的。
这里需要提到“内联前向声明”这个词!
前向声明只是一种在实际定义之前告诉编译器类型名称的方法。 您始终可以在头文件中找到它们。
// MyStruct.h
class MyClass;
struct MyStuct {
MyClass* m_myClass;
void foo();
}
// MyStruct.cpp
#inlude "MyClass.h"
void MyStruct::foo() { m_myClass->SomeFunc(); }
请注意,头文件仅将MyClass声明为类标识符,并且在通过cpp文件中的#include定义之前不知道它实际上是什么。 这是前瞻性声明。
内联前向声明实际上是相同的,但你只需在一行上完成所有操作。 这是完全相同的完全相同的代码。
// MyStruct.h
struct MyStuct {
class MyClass* m_myClass;
void foo();
}
// MyStruct.cpp
#inlude "MyClass.h"
void MyStruct::foo() { m_myClass->SomeFunc(); }
我觉得大多数程序员更喜欢标准的前向声明方法(通常整体打字较少)。 这就是为什么当绊倒较少使用的内联版本时它会让人感到困惑。
我在这里看到许多答案,称之为可选关键字,但在上面的内联前向声明的上下文中,它非常不可选,并且由于缺少类型说明符而导致编译错误。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.