------------------------------------------------------------------------------------------------------------------------------------------------------
首先说明一下:
void test(const const int);
这样声明肯定是错误的。
现在我们看看下面的这个模板:
template <class T>
void test(const T a){//注意此处有一个const
...
}
test<const int>(4);//注意实例化类型中还有一个const
此处T应该被实例化为const int,那么test模板函数的实例化结果就会出现两个const的情形:
void test(const const int);
既然这种声明方式是非法的,那为什么编译器允许上述程序顺利通过编译呢?
------------------------------------------------------------------------------------------------------------------------------------------------------
参考帖子:
http://community.youkuaiyun.com/Expert/topic/5128/5128664.xml?temp=.9103968
本文探讨了C++中关于函数参数使用双重const的问题,并解释了为何编译器能够接受表面上看似非法的声明。通过一个具体的例子展示了如何实例化带有两个const修饰符的模板函数,同时提供了可能的原因和相关讨论链接。
3470

被折叠的 条评论
为什么被折叠?



