我最近在一些代码中看到了这样定义的结构:
typedef struct tagMyStruct {
int numberOne;
int numberTwo;
} MYSTRUCT;
以我的理解,
tagMyStruct
是新的数据类型,MYSTRUCT
是在此创建的变量。在另一个地方,这样使用:
MYSTRUCT *pStruct = new MYSTRUCT;
并且可以在Visual Studio 2010中很好地编译。有效的C++如何?我以为
MYSTRUCT
是变量而不是类型? 最佳答案
否。tagMyStruct
是该结构的名称。在C语言中,与C++不同,每次使用struct类型时,都必须显式使用struct关键字。例如
tagMyStruct x; //error
struct tagMyStruct x; //OK
为了避免始终写struct,请将
struct tagMyStruct
转换为typedef
。现在你可以写MYSTRUCT x; //ok, same as struct tagMyStruct x;
您认为这(变量定义)是没有typedef关键字的,像这样
struct tagMyStruct {
int numberOne;
int numberTwo;
} MYSTRUCT;
BTW
MYSTRUCT pStruct = new MYSTRUCT; //error cannot convert MYSTRUCT* to MYSTRUCT
还是无效的C或C++。也许你是说
MYSTRUCT* pStruct = new MYSTRUCT; //valid C++ (invalid C - use malloc instead of new in C)
hth