比如是否允许一个函数传入指针,或者传入引用。
swap(T* a, T* b) {}
同时允许
swap(T& a, T& b) {}
C++是否允许这样的重载? 我试验了一下,编译器调用引用方式函数的时候会报错。 如果语言允许,应该怎么声明?
谢谢。
欢迎选择我的课程,让我们一起见证您的进步~~
这样的重载应该是允许的,以下是试验代码(加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
这样的重载应该是允许的,以下是试验代码(加template前也能正常工作)
请问问题是这个意思吗?还有“编译器调用引用方式函数的时候会报错”指的是否是编译器报错?能否给出错误消息?
谢谢
EDIT:
看到你的错误信息里面有如下内容:
函数名应该是和type_traits这个文件(可能编译器自动包含了它)里的swap函数定义重复了,导致报错。可以试试将测试代码中的swap函数改个名称从而解决冲突。
PS 我使用的编译命令:g++ -Wall -o test test.cpp