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