C++,用运算符的指针和地址重新创建内存集

C++, recreate memset with pointers and address of operators

tl;dr; 如何使用基本 c++?

重现 memset

我想弄清楚 memset 是如何工作的,看看我是否可以使用指针和地址在正常的 c++ 中重现它。

这就是我目前所知道的。

    void test_memset( void * origin, uint8_t val, size_t size ){
         if( size != 1 ){
             uint8_t* new_or = (uint8_t*) origin;  // casting to uint8_t*
             *new_or ^= (*new_or & 0xff); // clearing any remaining data
             *new_or ^= val;              // assigning the val
             new_or++;                    // incrementing pointer
             test_memset_alloc( new_or, val, size-1 ); // recursion
         }
    }   

所以问题是:基本 C++ 中的 memset 是什么样的?

编辑 1:

回答here in similar manner, and here有点冗长。这两个答案都比我的提议更合适。

但我希望看到一些详细的解决方案,这将能够解释 Mort(业务线开发人员)或知识分散的人,比 :"This is frowned upon" 或 "not a c++ way"。

memset 类似于基本 C++ 中的以下内容:memset

不是开玩笑。这是一个非常基本的功能,对于编译器来说,下一步可能是目标特定的汇编代码。

C 或 C++ 中的基本、低效但正确的 memset 实现如下所示:

typedef unsigned char byte;

void* memset(void* s, int c, size_t sz) {
    byte* p = (byte*)s;

    while (sz--)
        *p++ = (byte)c;
    return s;
}

这使用循环,因为循环是完成这项工作的正确工具。你坚持避免循环是没有意义的。 "they don't exist from processors point of view" 不是避免使用它们的正当理由。这不是一个真正的声明,甚至不是一个有意义的声明。您的进一步解释表明严重缺乏对 How Things Work™ 的理解。如果一个循环是一个黑盒子,那么一切都是一个黑盒子。函数调用是一个黑盒子。演员是一个黑盒子。 if 语句是一个黑框。像 (x+y)*z 这样的算术表达式是一个黑框。 None 其中或多或少比循环透明。