這個正確的方式我有這樣的代碼:是修復曖昧函數調用
#include <cstdio>
void test(size_t const pos){
printf("size_t\n");
}
void test(const void *ptr){
printf("ptr\n");
}
//void test(int const pos){
// printf("int\n");
//}
int main(){
size_t x = 0;
test(x);
test(nullptr);
test(&x);
// test(0);
// some more that fail, but I do not care too much about them:
// test(0U);
// test(0L);
// test(NULL);
}
當我取消註釋test(0);
它不會編譯,因爲編譯器不知道如何將「0」。
如果我引入'int'重載,所有事情都會再次編譯。
這是避免模糊函數調用的正確方法嗎?
UPDATE
正確就意味着 - 我要不要打電話指針過載,除了在案件的說法是指針或nullptr
傳遞。
我知道,目前的「設置」失敗,0U
,0L
,NULL
。
的可能的複製[我如何修復的「曖昧」的函數調用?] (http://stackoverflow.com/questions/7549874/how-doi-i-fix-an-ambiguous-function-call) – Jezor
那麼......這取決於你期待什麼結果。 – Jezor
那麼,因爲這解決了編譯錯誤,我不知道任何更好的「正確」的定義。 –