我有一些 C 代码,在整个代码中都使用了结构。 我主要使用 memset 或 memcpy 将数据从缓冲区复制到缓冲区。
想知道这在 C++ 中行得通吗? ' 根据 MSDN :
在 C++ 中,结构与类相同,只是其成员是 默认公开。
这意味着 C++ 编译器会将内部插入到结构对象中,而 memset 或 memcpy 将无法像 C 中那样工作。
另外,“this”指针也适用于结构吗?有什么方法可以阻止编译器将任何 C++ 风格的内容插入到我的对象中吗?
只要您的结构不使用任何 C++ 构造(虚拟主义等),
memcpy
和 memset
即使在 C++ 中也可以使用。
另外,'this'指针适用于结构体吗?
是的,
this
指针适用于结构,就像适用于类一样。
有什么方法可以阻止编译器将任何 C++ 风格的内容插入到我的对象中吗?
除非您在结构中使用任何 C++ 构造,否则编译器不会这样做。
您可以随意使用
memXXXX
,只要您的struct
(或class
)仅包含序数数据类型或由这些数据类型组成的结构/类,没有不平凡的c'tors/d'tors(构造函数/析构函数)。
事实上,这是一个
class
或 struct
- 并不重要。
我有一些 C 代码,在整个代码中都使用了结构。我主要使用 memset 或 memcpy 将数据从缓冲区复制到缓冲区。
想知道这在 C++ 中行得通吗? ' 根据 MSDN :
在 C++ 中,结构体与类相同,只是其成员默认是公共的。
是的 - MSDN 是正确的,但这并不意味着复制 C++
class
与复制 C struct
一样安全,而是结构可以像类一样复杂,而且一般来说都不安全。 您绝对应该更喜欢正确使用默认/复制构造对象并放弃 memset
/memcpy
操作。 虽然 memset
和 memcpy
可以在有限的情况下工作(基本上,当 class
/struct
及其所有基类仅包含在 C 中可以工作的内容时(指向虚拟调度表的指针将无法正确使用)由 memset 设置,但可能在 memcpy
之后工作 - 所有实现定义),并且不尝试维护任何在实践中,类通常具有不变量,或者在它们变得更加自我管理、封装代码/数据单元时引入它们:构造函数可以确保某些数据成员具有相关的、一致的、预期的值——而不需要保持这些不变量为真——并且memset 可能会使除最简单的之外的所有内容无效 - 该类稍后可能会表现出未定义的行为。
另外,“this”指针也适用于结构吗?有什么方法可以阻止编译器将任何 C++ 风格的内容插入到我的对象中吗?
是的 - C++ 中的
struct
与 class
是同一类型的实体 - 唯一的区别在于成员函数和数据的可见性/可访问性。 两者都有 this
指针。 但是,此指针不存储在类/结构中 - 它们是隐式提供给成员函数调用的指向此类对象的指针。 在 (ab) 使用 memcpy
和 memset
的情况下,您不必担心这一点。 更一般地说,您唯一需要担心的 C++ 特定问题是可能会失效的 virtual
函数和类不变量。 您仍然需要担心 C 问题:memcpy
使用相同的资源(文件描述符、堆指针、锁等)创建多个对象,其中两个对象都假定它们对该资源具有独占控制权并尝试删除/释放/稍后发布。
这意味着 C++ 编译器会将内部插入到 结构对象
不,不是。
并且 memset 或 memcpy 将无法像 C 中那样工作。
也不是这个意思。
你的猜测完全没有动机,你的问题也不清楚。