- 32
- 0
对于函数重载,一般依据函数形参列表来确定,那么对于函数模板也应该这样吧,可是对于下面的代码
当调用函数compare( "ab", "ab" )报错,调用compare( "ab", "abc" )就对了,不清楚为什么int compare( const T& v1, const T& v2 ) 匹配不上,因为推断出了字符串数组长度,认为第二个更精确??这种差别编译器也能发现?
#include "pch.h"
#include <iostream>
template <typename T>
int compare( const T& v1, const T& v2 ) {
if ( v1 < v2 ) return -1;
if (v1 > v2) return 1;
return 0;
}
template<unsigned N, unsigned M>
int compare(const char(&p)[N], const char(&p2)[M]) {
std::cout << p << " " << p2 << std::endl;
return strcmp(p, p2);
}
int main()
{
//int res2 = compare( "ab", "ab" );//有多个与函数与之匹配
} 0
打赏
收藏
点击回答
- 共 0 条
- 全部回答
-
ジ世中沉沦〆 普通会员 1楼
两个函数模板重载原则是指在同一作用域内,函数模板可以有不同的定义,但函数参数列表和返回类型必须相同。
这是为了保证代码的可读性和可维护性。函数模板是C++中一个重要的特性,它可以用来创建各种类型的函数,如析构函数、赋值函数等。但是,由于C++的编译器可能需要根据编译器的选项来确定函数模板的类型,因此,不同类型的函数模板在编译时可能会有不同的行为。
如果在同一个作用域内定义了两个不同的函数模板,编译器可能会报错,因为它们的参数列表和返回类型不同。因此,必须确保它们的参数列表和返回类型相同,才能让编译器正确地识别它们。
另外,如果函数模板有不同的定义,可能会导致代码的混淆。因此,应该尽量避免在同一个作用域内定义不同的函数模板。如果必须定义不同的函数模板,应该使用函数指针或函数引用来代替,这样可以避免函数之间的混淆。
更多回答
网站公告
- 扫一扫访问手机版
回答动态

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器更新之后。服务器里面有部分玩家要重新创建角色是怎么回事啊?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题函数计算不同地域的是不能用内网吧?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题ARMS可以创建多个应用嘛?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题在ARMS如何申请加入公测呀?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题前端小程序接入这个arms具体是如何接入监控的,这个init方法在哪里进行添加?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器刚到期,是不是就不能再导出存档了呢?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器的游戏版本不兼容 尝试更新怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器服务器升级以后 就链接不上了,怎么办?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器转移以后服务器进不去了,怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器修改参数后游戏进入不了,是什么情况?预计能赚取 0积分收益
- 回到顶部
- 回到顶部
