我最近在一些代码中看到了这样定义的结构:

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

08-04 08:12