C++20空基类优化:嵌入空基类不占空间[[no_unique_address]]

#include 
#include "common/log.h"
#include 
#include 
#include 
#include 
#include 
using namespace AdsonLib;
//空基类占用1字节
struct Base{

};
//空基类优化: 在继承中让空基类占0字节
struct Children{
    Base base;
    int other;
};

//继承,sizeof(Children2) == 4
struct Children2: public Base{
    int other;
};

//sizeof(Children3) == 4
struct Children3{
    [[no_unique_address]]Base base;
    int other;
};
int main(int argc, char *argv[]) {
    static_assert(sizeof(Base) == 1);
    static_assert(sizeof(Children) == 8); //4字节对齐
    static_assert(sizeof(Children2) == 4); //4字节对齐
    static_assert(sizeof(Children3) == 4); //4字节对齐
    LOG(INFO) << "sizeof(base): " << sizeof(Base);
    LOG(INFO) << "sizeof(Children): " << sizeof(Children);
    LOG(INFO) << "sizeof(Children2): " << sizeof(Children2);
    LOG(INFO) << "sizeof(Children3): " << sizeof(Children3);
}

你可能感兴趣的:(c++)