1
假設我沒有使用多繼承或虛繼承,C++標準是否保證如果我將Derived*
轉換爲Base*
這兩個指針的值將完全相同?例如,即使Derived
和/或Base
具有虛擬功能,以下代碼是否始終會呼叫success()
?如果我將派生指針轉換爲基指針,兩個指針是否保證具有相同的值?
Derived* d = new Derived;
Base* b = d;
if (((void*)b) == ((void*)d))
success();
else
failure();
據此,原始指針不保證是相同的:http://stackoverflow.com/questions/6943892/difference-in-memory-layout-of-pointer-to-base-and-pointer- to-derived-object – maditya
指針最初可能相等,但如果某人稍後進入並對代碼進行一些維護並且它們不再相同,會發生什麼? –