如果存在多種可能性,C++編譯器如何決定調用哪個函數/方法? 以我特定情況下,我有的C++運行時間的標準自由功能和我也有一個模板自由變型中,是這樣的:在C++中解析函數/方法/模板名稱的首選項是什麼?
// The definitions of the C++ Run Time Library (from memory.h)
extern malloc(size_t s);
extern void free(void *p);
// Our own memory management functions
extern void *OurMalloc(size_t s);
extern void OurFree(void *p);
// Own variants to overrule malloc and free (instead of using #define)
template<typename T>
void *malloc(T t)
{
return OurMalloc(t);
}
template<typename T>
void free(T *t)
{
OurFree(t);
}
我測試此使用以下代碼:
void main(void)
{
void *p = malloc(10);
free(p);
}
如果我編譯並運行它,看起來對malloc的調用被模板變體正確地替換了。到現在爲止還挺好。
但是,免費的調用不會被替換爲模板變體,並且標準C++函數仍然被調用。
C++編譯器使用哪些規則來決定哪個變體優先? 這與Koenig查找規則有關嗎?
注意:我試過這種方法,因爲使用#define不能解決問題(請參閱問題How to use C macro's (#define) to alter calls but not prototypes)。
這是C問題還是C++問題?如果你使用模板,它必須是C++。但它被標記爲C,並且您正在使用malloc()。咦? – 2010-02-23 16:21:48
@Fred Larson:我已經將問題編輯爲純C++ - 提問者可能感到困惑,因爲MSVC似乎混淆了C和C++。 – 2010-02-23 16:24:33
對。我其實正在試圖解決一個C malloc/free問題。因此我最初使用c標籤。但是你是對的,它必須是C++。 – Patrick 2010-02-23 16:24:44