以下结构定义是什么意思

What does the following struct definition mean?

本文关键字:是什么 意思 定义 结构      更新时间:2023-10-16

在代码中的几个地方,我有一个struct定义,如下所示:

typedef struct tagNameOfStruct{
  //some methods and members
}T_NameOfStruct, * PT_NameOfStruct, FAR LPT_NameOfStruct;
typedef struct tagNameOfStructLists{
  //some methods and members
}T_NameOfStructLists, * PT_NameOfStructLists, FAR LPT_NameOfStructLists;
 typedef pair<T_NameOfStruct, T_NameOfStructLists> CStructPair;
 typedef map<T_NameOfStruct, T_NameOfStructLists> CStructMap;

比我看到在循环内的方法中使用以下代码行

T_NameOfStruct instance;
T_NameOfStructLists listInstance;
m_MapInstance.insert(CStructPair(instance, listInstance));
//structMapInstance is a members of method class of type CStructMap

该实例正在插入到函数范围之外使用的数据结构中。它通过引用传递给数据结构。

  1. 当我们离开函数作用域时,实例不应亡吗?
  2. 结构定义的最后一行是什么意思?

编辑----为什么这不是重复的,请重新打开---- :结构定义中的 * PT_NameOfStruct、FAR LPT_NameOfStruct也与你们链接的问题不同。此外,还存在在方法堆栈上定义实例时通过 ref 传递实例的问题。奇怪的是代码有效,所以我想知道我在这里错过了什么。为什么我在尝试访问遍历数据结构的不同函数中被销毁的对象时没有收到异常。还认为它是重复的吗?

当我们离开函数作用域时,实例不应亡吗?

是的。如果您没有向我们展示的代码实际上在那之后使用了对它的引用,那么这是错误的。但是由于我们看不到它,我们只能猜测它是否这样做。

更新:现在您已经向我们展示了实际发生的事情,它被传递给map::insert,后者存储其参数的副本(即使它通过引用获取参数(。当instance本身被销毁时,假设它具有有效的复制语义,则没有问题。

结构定义的结尾是什么意思?

它声明:

  • 一个名为 tagNameOfStruct 的类。
  • 类类型的别名,称为 T_NameOfStruct 。C++,这是完全没有意义的;在 C 语言中,有些人有一个不好的习惯,以避免在指定类型时键入struct
  • 指向该类型的指针的别名,称为 PT_NameOfStruct 。这是一个比第一个 typedef 更糟糕的想法,因为它隐藏了某些东西是指针的重要信息。
  • 指向该类型的过时"far"指针的别名,称为 LPT_NameOfStruct 。这是 16 位平台的宿醉;在现代平台上,它将与常规指针类型相同。

不要将其用作如何声明类类型的模型。最好保持简单:

class NameOfStruct {  // or "struct", if you want members to be public by default
    // members
};
NameOfStruct instance;  // No need for a typedef
NameOfStruct * pointer; // Make it clear that it's a pointer

struct tagNameOfStruct{

在C++中,结构标记具有与 typedef 等效的状态。在 C 中不是这样。

T_NameOfStruct

这是tagNameOfStruct的另一个更好的名字.

*PT_NameOfStruct

这是指向NameOfStruct的指针的类型定义。

远LPT_NameOfStruct;

对于指向NameOfStruct的 FAR 指针来说,这是一个过时的名称,因为据我所知,自 Windows 95 以来,nearfar 指针的含义相同。请注意,这是因为前面的 typename 中的前*,由于 C 奇怪的指针语法,该延续到此类型。

这里唯一需要担心的是 NameOfStruct ,它是结构本身的 typedef,以及 PT_NameOfStruct ,它是指向它的指针。其余的都是绒毛。

该实例正在插入到函数范围之外使用的数据结构中。它通过引用传递给数据结构。

当我们离开函数作用域时,实例不应亡吗?

是的。您发现了一个错误。

结构定义的结尾是什么意思?

"结构定义的结束

"意味着这是结构定义的结束。还有什么意思?你的意思是宣言的结束吗?你是说我上面所说的一切吗?

除了上述答案,

struct s
{
}

在上面的结构定义中,您可以使用如下

在 C 中声明实例,您应该这样做

struct s instance1;

在 C++ 中,您应该定义如下

struct s instance1; (or)
s instance1;

两者都在 C++ 中有效。

在 c 中,您可以使用 typedef 进行简化,而不是在所有区域使用结构 s。