C++typedef中的struct关键字
struct keyword in C++ typedef
我正在看Glew的标题,发现了一个问题:
// C
typedef struct __GLsync *GLsync;
我知道Glew是一个C库,因此与C++不同,我知道这是C++中的有效代码:
// C++
struct S { ... }; // S defined in the class name space
void f( S a ); // struct is optional
我的问题是,在C++中从typedef
中删除struct关键字并将头包含在仅C++的项目中是否安全?
typedef /*struct*/ __GLsync *GLsync;
如果不是,那么当我使用struct
关键字和不使用它来执行typedef
时,会有什么区别?
以下形式的typedef:
typedef struct S *SPtr;
不需要CCD_ 4在同一翻译单元中是什么的先验知识。它假定某个结构S
的前向声明,并将SPtr
别名为指向该结构的指针类型。然而,这:
typedef S *SPtr; // error unless S is declared earlier
需要在声明指针别名类型之前已知类型S
(可能是结构)的声明。
虽然这看起来微不足道,但它是皮条习惯用法常见实现的基石。注意,这里并没有真正涉及typedef
,struct MyClassImpl*
作为一个指向未知"事物"的指针类型的声明(稍后(但在实际取消引用之前)才是重要的:
MyClass.h
#ifndef MY_CLASS
#define MY_CLASS
class MyClass
{
... members ...
private:
struct MyClassImpl * m_pimpl; // note no MyClassImpl yet known
};
#endif
MyClass.cpp
#include "MyClass.h"
// implementation formal declaration and implementation.
struct MyClassImpl
{
... members...
};
// MyClass implementation using the now-known MyClassImpl
如果该指针被声明为:
MyClassImpl * m_pimpl;
类型CCD_ 10将需要预先声明,否则将产生编译时错误。
我希望这有助于确定两种申报方法之间的一个关键区别。(是的,我知道,我应该用一个智能指针=P)
祝你好运。
这里的真正答案是也许。这取决于在它之前发现的其他代码
话虽如此,你绝对可以改变这一点:
typedef struct __GLsync *GLsync;
对此:
struct __GLsync;
typedef __GLsync *GLsync;
如果要从typedef
中删除struct
关键字,则必须执行以下操作:
typedef struct S { ... }__GLsync; // S defined in the class name space
然后你可以使用:
typedef __GLsync *GLsync;
附加问题:
如果struct
已经被其他人定义,那么如何解决
typedef struct __GLsync *abc;
typdef *abc GLsync
您可以执行类似的操作
相关文章:
- Visual Studio 2015:Extern "C" 和 "export" 关键字
- C++中的"inline"关键字
- std::map<struct,struct>::find 找不到匹配项,但是如果我循环通过 begin() 到 end(),我在那里看到匹配项
- Openssl 1.1.1d无效使用不完整的类型"struct dsa_st"
- 如何确保C++函数在定义之前声明(如override关键字)
- C++Union/Struct位域的实现和可移植性
- 如何在c++中定义以struct为数据成员的类中的构造函数
- 谷歌模拟和覆盖关键字
- 结构体 S { int align; } 之间的区别;(struct 关键字后的名称)和 struct { int al
- 如果全局变量默认是外部变量,为什么要添加"extern"关键字?
- struct.error:解压缩 C++ 结构时,解包需要 288 字节的缓冲区
- 当我从下面的代码中删除关键字 virtual 时,它可以正常工作,否则会出现错误。在这里"virtual"字的意义是什么?
- 为什么"delete"关键字不删除节点?
- 使用 "struct" 关键字的结构实例化
- C++typedef中的struct关键字
- 当已经有"struct"时,在C++中包含'class'关键字的原因是什么?
- 在c++中使用struct关键字声明变量
- 如何使用extern关键字正确初始化struct[int]
- 函数参数中的struct关键字,以及const正确性
- 使用 struct 关键字声明类,反之亦然