C++语法记录

220 阅读1分钟

学习jvm过程中学习一些c++知识的笔记

前向申明(解决循环引用等问题)

zhuanlan.zhihu.com/p/428923853 可参考

class ClassLoaderDataGraph;
class JNIMethodBlock;
class ModuleEntry;
class PackageEntry;
class ModuleEntryTable;
class PackageEntryTable;
class DictionaryEntry;
class Dictionary;

// ClassLoaderData class

class ClassLoaderData : public CHeapObj<mtClass> {
  friend class VMStructs;

c++类中的匿名union

参考文档

class A {
private:
    union {
        int a;
        long long b;
    };

public:
    const void print() {
        printf("a.a = %i\n", this -> a);
    }

    void setInt(int i) {
        this->a = i;
    }
};

形如上面的匿名的union会被转化为类似如下形式,注意是形似,核心区别是2个值共用一块内存 普通下面类的声明a,b不会共用一块内存

class A {
private:
        // 用union包裹的a,b共用一块内存
        // 如果普通类声明这2个变量,将占用2块内存
        int a;
        long long b;

public:
    const void print() {
        printf("a.a = %i\n", this -> a);
    }

    void setInt(int i) {
        this->a = i;
    }
};

c++中在位模式下进行类型转化 en.cppreference.com/w/cpp/langu…

` reinterpret_cast <  ` new-type `  > (  ` expression `  ) `

ldd 是一个linux的 shell 脚本,并不是一个可执行程序(C++编译后的可执行程序);用来打印共享库的依赖关系

dlopen, dlsym, dlerror, dlclose 用户打开动态链接库

  • rsp寄存器, 始终指向函数调用栈栈顶

  • rbp寄存器, 一般用来指向函数栈帧的开始位置