以下结构定义是什么意思
What does the following struct definition mean?
在代码中的几个地方,我有一个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
该实例正在插入到函数范围之外使用的数据结构中。它通过引用传递给数据结构。
- 当我们离开函数作用域时,实例不应亡吗?
- 结构定义的最后一行是什么意思?
编辑----为什么这不是重复的,请重新打开---- :结构定义中的 * 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 以来,near
和 far
指针的含义相同。请注意,这是因为前面的 typename 中的前*
,由于 C 奇怪的指针语法,该延续到此类型。
这里唯一需要担心的是 NameOfStruct
,它是结构本身的 typedef,以及 PT_NameOfStruct
,它是指向它的指针。其余的都是绒毛。
该实例正在插入到函数范围之外使用的数据结构中。它通过引用传递给数据结构。
当我们离开函数作用域时,实例不应亡吗?
是的。您发现了一个错误。
"结构定义的结束结构定义的结尾是什么意思?
"意味着这是结构定义的结束。还有什么意思?你的意思是宣言的结束吗?你是说我上面所说的一切吗?
除了上述答案,
struct s
{
}
在上面的结构定义中,您可以使用如下
在 C 中声明实例,您应该这样做
struct s instance1;
在 C++ 中,您应该定义如下
struct s instance1; (or)
s instance1;
两者都在 C++ 中有效。
在 c 中,您可以使用 typedef 进行简化,而不是在所有区域使用结构 s。
- 这个语法std::class<>{}(arg1, arg2) 在C++中是什么意思?
- 标准 N3337 5.2.10 第 7 条中的C++"类型"是什么意思?
- "类模板示例<int>;"语句对 C++11 是什么意思?
- 线应该是什么意思
- "CID"在AT+HTTPPARA= "CID" ,1中是什么意思
- 表达式"b=(b-x)&x"是什么意思?
- 这个表达是什么意思?
- 此代码验证公式是什么意思?
- 跟踪日志中的T.11803()是什么意思?
- 这个额外的关键字在这个 c++ 类声明中是什么意思?
- * 和 ** 在 C++ 函数声明中是什么意思?
- _T("xyz")是什么意思?
- #define Dbg(fmt,..) (0) 是什么意思? 警告:表达式无效
- 这行代码到底是什么意思?
- 在命名空间名称之前加上 :: 是什么意思?
- 从字符数组的元素中减去'a'是什么意思
- "friend"关键字在C++中是什么意思?
- 减法中的"0"是什么意思?
- 字符数组前面的加号是什么意思?
- 这里的字符串函数是什么意思