#include <cstring>
#include <type_traits>
#include <cassert>
int main() {
std::aligned_storage_t<sizeof(void*), alignof(void*)> storage, copy;
int i = 42;
std::memcpy(&storage, &i, sizeof(int));
copy = storage;
int j{};
std::memcpy(&j, ©, sizeof(int));
assert(j == 42);
}
这起作用(对于一些作品的定义)。然而,标准告诉我们:
对于任何可复制类型t
的对象(基类子对象除外),无论该对象是否具有t
类型的有效值,组成该对象的基础字节都可以复制到char
、无符号char
或std::byte
的数组中。
如果将该数组的内容复制回该对象,则该对象随后将保留其原始值。[示例:
#define N sizeof(T)
char buf[N];
T obj; // obj initialized to its original value
std::memcpy(buf, &obj, N); // between these two calls to std::memcpy, obj might be modified
std::memcpy(&obj, buf, N); // at this point, each subobject of obj of scalar type holds its original value
-结束示例]
还有这个:
对于任何简单可复制的类型T
,如果指向T
的两个指针指向不同的T
对象Obj1
和Obj2
,其中Obj1
和Obj2
都不是基类子对象,如果组成Obj1
的基础字节被复制到Obj2
中[示例:
T* t1p;
T* t2p;
// provided that t2p points to an initialized object ...
std::memcpy(t1p, t2p, sizeof(T));
// at this point, every subobject of trivially copyable type in *t1p contains
// the same value as the corresponding subobject in *t2p
-结束示例]
在任何情况下,它都提到允许在缓冲区中复制一个简单可复制的类型,然后将其复制回原始类型的新实例中。
在上面的html" target="_blank">示例中,我做了类似的事情,另外我还将缓冲区复制到一个新缓冲区中(这更像是现实世界中的情况)。
在问题顶部链接的评论中,作者说这种行为被低估了。另一方面,我看不出如何通过网络发送int
,并在另一端使用它(在缓冲区中复制int
,通过网络发送,将其作为缓冲区接收,并在int
的实例中memcpy--大致与我在示例中所做的一样,在没有网络的情况下),如果不允许这样做,则如何通过网络发送int
。
这是允许的一些其他项目的标准,我错过了还是这是真的低估了?
我读起来很好。
您已经将obj1
的底层字节复制到obj2
中。两者都是琐碎的,属于同一类型。你引用的散文明确地允许这样做。
通过显式允许的重新解释为char*
,将所述底层字节临时存储在大小正确、对齐正确的保存区域中,这一事实似乎并没有改变这一点。它们仍然是“那些字节”。没有规则规定复制必须是“直接的”才能满足这样的功能。
FAQs in section [1]: [1.1] 作者 [1.2] 版权布告 [1.3] 复制许可 [1.4] 免责事项 [1.5] 商标 [1.6] C++-FAQ-Lite != C++-FAQ-Book 1.1 作者 Marshall Cline [email protected] (简体中文版翻译:申旻 [email protected]) 1.2 版权布告 原文: The ent
我有一个简单的JavaFX应用程序,它允许用户查询数据库并查看表中的数据。 我使用的是标准的javafx.Scene.Control.TableView类。是否有一种简单的方法来启用单元格复制?我做了一些搜索,我看到其他人创建自定义菜单命令...我不想创建一个自定义菜单,我只想要基本的键盘复制与单细胞工作。 我使用的是单一选择模式,但如果需要,我可以更改为其他模式:
我们有一个在美国和欧盟托管的应用程序。为了获得更好的性能,我们将在这两个位置上托管一个datastore实例。 现在我们的问题是如何将数据从美国数据库复制到欧盟数据库? 还是不管我们从技术角度将数据存储在哪里?
我需要把允许起源在我的Jersery项目。m得到错误:-访问控制-允许-起源-问题在角-2我应该把需要。
我试图获取具有特定类名的所有元素: 然而我得到的错误是: 我知道类名中不允许有空格,但是我该怎么办呢? 谢啦
今天我遇到了一些我不太理解的复制构造函数。 考虑下一个代码: 然后在将原点分配给复制时调用复制构造函数,这是有意义的。但是,如果我将复制的声明更改为 它不叫。即使当我使用< code>create()函数时,它也不会调用复制构造函数。但是,当将其更改为 它确实调用了复制构造函数。一些研究解释说,允许编译器优化复制构造函数,这听起来是件好事。直到复制构造函数是非默认的,因为那时它可能会,也可能不会做