所以給定簡單的代碼像以下類繼承鏈和指針到每個類別
+----------------+
| C (int) |
|+--------------+|
|| B (+1) ||
||+------------+||
||| A (2int) |||
||+------------+||
|+--------------+|
+----------------+
所以現在簡單的代碼:
C objectC;
A* aPtr = &objectC;
B* bPtr = &objectC;
C* cPtr = &objectC;
我所期望的,即使編譯器生成的代碼,這使得日Ë下面的表達式返回true:
(aPtr == bPtr && bPtr == cPtr)
下面的表達式應該返回false:
((int)aPtr == (int)bPtr && (int)bPtr == (int)cPtr)
,但我的電腦上它也返回真。在打印出指針的數值之後,它們也是相同的。
我的問題是爲什麼運行程序後預期的結果沒有出現?是否有一些C++文檔指定了像這樣的情況下指針值的確切行爲,還是更像編譯器依賴的東西?
誰說'(aPtr == bPtr && bPtr == cPtr)'必須是真的?你觀察到了嗎? – NathanOliver
@NathanOliver當然在他的例子中,這些指針應該比較相等(隱式轉換爲公共基類型後) – Leon
_「下面的表達式應該返回false」_爲什麼? 'C'包含其'B'子對象包含其'A'子對象。當多重繼承發揮作用時,你只會得到不同的結果。至於文件,是的,請閱讀系統和編譯器使用的ABI。 –