我不完全理解以下内容:
当同时使用调试和优化时,优化器执行的内部重新排列会使得在调试器中检查优化程序时很难看到发生了什么。例如,语句的顺序可能会改变。
我的理解是,当我使用该-g选项构建程序时,可执行文件将包含一个符号表,其中包含变量、函数名称、对它们的引用及其行号。当我使用优化选项构建时,例如指令的顺序可能会根据优化而改变。
我不明白的是,为什么调试更困难。我想看一个例子,以及一个易于理解的解释。
我想知道reinterpret_cast是如何在幕后工作的.我正在从一本书中学到它,但我只是不明白.例如,假设我有以下部分代码:
int a = 255;
char *pChar = reinterpret_cast<char*>(&a);
Run Code Online (Sandbox Code Playgroud)
要么
std::string str = "Hello";
char *pChar = reinterpret_cast<char*>(&str);
Run Code Online (Sandbox Code Playgroud)
pChar在两个例子中都指出了什么,当我试图打印他们的内容时我为什么看不到任何东西,当然reinterpret_cast如何工作?
编辑: 我知道reinterpret_cast使用非常危险,只想用它将字节直接写入内存块的二进制文件中.我不明白的是,当我有一个
int a = 255; (00 00 00 FF in memory)
Run Code Online (Sandbox Code Playgroud)
我想将变量a视为一系列字节,char*:
char *pChar = reinterpret_cast<char*>(&a);
Run Code Online (Sandbox Code Playgroud)
pChar会指向变量的各个字节a(00 00 00 FF)吗?
所以当我想写入二进制文件时pChar指向的是什么:
a_file.write(reinterpret_cast<char*>(&a), sizeof(a));
Run Code Online (Sandbox Code Playgroud)
它写出变量的各个字节a,对吧?