c++ - 指针和引用可以重载吗?
天蓬老师
天蓬老师 2017-04-17 11:41:07
0
1
548

比如是否允许一个函数传入指针,或者传入引用。

swap(T* a, T* b) {}

同时允许

swap(T& a, T& b) {}

C++是否允许这样的重载?
我试验了一下,编译器调用引用方式函数的时候会报错。
如果语言允许,应该怎么声明?

谢谢。

天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

全部回覆(1)
左手右手慢动作

這樣的重載應該是允許的,以下是試驗程式碼(加template前也能正常運作)

#include <cstdio>

template<typename T> void swap(T *a, T *b)
{ T t = *a; *a = *b; *b = t; }

template<typename T> void swap(T &a, T &b)
{ T t = a; a = b; b = t; }

int main()
{
    int x = 3, y = 6;
    printf("%d %d\n", x, y);
    swap<int>(&x, &y);
    printf("%d %d\n", x, y);
    swap<int>(x, y);
    printf("%d %d\n", x, y);
    return 0;
}

請問問題是這個意思嗎?還有「編譯器呼叫引用方式函數的時候會報錯」指的是否是編譯器報錯?能否給出錯誤訊息?
謝謝


EDIT:
看到你的錯誤訊息裡面有以下內容:

..../type_traits:3201:1: note: candidate function [with _Tp = int]

函數名稱應該是和type_traits這個檔(可能編譯器自動包含了它)裡的swap函式定義重複了,導致報錯。可以試試將測試程式碼中的swap函數改個名稱來解決衝突。

PS 我使用的編譯指令:g++ -Wall -o test test.cpp

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板