在我调试和研究 netscape 系浏览器插件开发时,注意到了这个问题.即,在对象布局已知(即对象之间具有继承关系)时,不同类型对象的指针进行转换(不管是隐式的从下向上转换,还是强制的从上到下转换)时,编译器会根据对象布局对相应的指针的值进行调整.不管是 microsoft 的编译器,还是 gcc 编译器都会做这个动作,因为这和 C++ 对象模型有关. 举一个简单的例子,如下代码: #include <stdio.h> class A { public: int x; void foo1()
状压dp是将每种状态都压缩成用一个二进制串,然后利用位运算进行操作的dp,而凡是dp都需要进行状态转移 对于简单的dp问题只需要一个二维数组dp[ i ][ j ]就能解决 具体操作为首先把状态压缩为二进制串, 然后对第一行进行初始化, 再利用三个for循环进行状态转移(第一层for循环控制行的前进,第二个和第三个for循环控制本行和上一行的状态) 利用状态转移对二维数组进行不断的更新(可以想到其实就是在不断更新填写一个二维表) 而复杂一点的dp问题就需要一个三维数组dp[ i ][ k ][