因此,想象一下,如果我们有一个自定义内存分配器,我们初始化它的大小为64,并且每当我们想要在其中构造一个新元素时,分配器将每个元素的起始地址对齐为一个16字节对齐的地址。例如,:--如果分配程序在堆上分配一个从地址0x00 to 0x40开始的内存,当我们在其中分配四个32位整数时,它们的内存地址是:0x00, 0x10, 0x20 and 0x30。例如,如果我们假设大小为15,则分配的内存地址将从0x00 to 0x10。
但是这一次,这个分配器不是将每个元素的起始地址对齐为一个16
为什么GCC版本的>= 10.1会用下面的代码产生taking address of rvalue错误?或者,当使用lvalue时,它为什么会抛出一个no matching function for call to 'a::n(a*)'错误?指针参数从何而来?Clang似乎完全可以接受代码(以及更老的GCC版本)。使用-std=c++14或-std=c++17编译会产生相同的行为。struct a { //
// static constexpr auto n