C++标准中,关于模板参数推导的一个问题.

yndfcd 2008-10-10 04:01:08
int main()
{
// #1: function type is f(int), t is nonconst
f<int>(1);
// #2: function type is f(int), t is const
f<const int>(1);
// #3: function type is g(int), x is const
g<int>(1);
// #4: function type is g(int), x is const
g<const int>(1);
// #5: function type is h(int, const int*)
h<const int>(1,0);
}


这是C++标准2003中的例子.
问题一:#2那个地方,函数原型是f(int)而t也就是1是const的,为啥可以编译能过?

问题二:后面有个note说#1和#2两个函数虽然原型是一样的,但是是不同的函数,为什么标准需要让编译器生成两个一样的函数.这是出于什么考虑?
...全文
75 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
yndfcd 2008-10-10
  • 打赏
  • 举报
回复
明白了,谢谢,Function type不是函数原型.
taodm 2008-10-10
  • 打赏
  • 举报
回复
标准里自然有关于函数type的规定,继续嘛。
yndfcd 2008-10-10
  • 打赏
  • 举报
回复
参数的cv修饰符不影响函数的type的。

是什么意思?

是说 f(int )和f(const int )是同一样的类型吗?
yshuise 2008-10-10
  • 打赏
  • 举报
回复
模板特化并不参加重载。
详见:《Exceptional c++ style》第7条
taodm 2008-10-10
  • 打赏
  • 举报
回复
兄弟,你可能还不知道什么是函数的"type"吧。参数的cv修饰符不影响函数的type的。
richbirdandy 2008-10-10
  • 打赏
  • 举报
回复
f<int>(1);
f<const int>(1);
这两是一样的么 一个T是int 一个是const int
你别说这两没区别
yndfcd 2008-10-10
  • 打赏
  • 举报
回复
忘了,标准上函数模板是这样声明的.
template <class T> void f(T t);
template <class X> void g(const X x);
template <class Z> void h(Z, Z*);
yshuise 2008-10-10
  • 打赏
  • 举报
回复
你至少要把你的模板函数贴出来才行啊

64,685

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧