gpt4 book ai didi

c++ - 手写 Action

转载 作者:行者123 更新时间:2023-12-04 14:35:19 27 4
gpt4 key购买 nike

我写了一个 vector 类来学习 move 语义。
我使用 move 构造函数来 move T(注释行)。
我的问题是为什么不像在 C 中一样复制临时对象的所有字节并将临时对象的所有字节设置为零?
我知道会为临时对象调用析构函数,它可能需要一些初始化的成员才能正确析构。这就是为什么我不能改变对象的内部表示的原因。
但如果我 100% 确定我的 ~T() 没有这样的要求,这是一个很好的优化吗?

 20     void push_back(T&& val)
21 {
22 check_cap();
23 //new (m_data + m_size) T(std::move(val));
24 for(int i = 0; i < sizeof(T); ++i)
25 {
26 reinterpret_cast<char*> (m_data + m_size)[i] = reinterpret_cast<char*> (&val)[i];
27 reinterpret_cast<char*> (&val)[i] = 0;
28 }
29 m_size++;
30 }
(如果与实际问题无关,请不要谈论类型转换及其安全性)
(我知道这不是一个好方法,最好不要在实际项目中使用它。但我只感兴趣从效率的角度来看它有多好。)

最佳答案

why not to just copy all the bytes of temp object and set all bytes of temp object to zero like in C?

is this a good optimization?


我想不是。这是一个 quick-bench使用 clang++ 比较您的手写版本和普通版本:
enter image description here
使用时 g++结果是 a tie ,所以那里也没有 yield 。

关于c++ - 手写 Action ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65508044/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com