84669 person learning
152542 person learning
20005 person learning
5487 person learning
7821 person learning
359900 person learning
3350 person learning
180660 person learning
48569 person learning
18603 person learning
40936 person learning
1549 person learning
1183 person learning
32909 person learning
比如是否允许一个函数传入指针,或者传入引用。
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