template const问题 !VS2005下!
template<typename et>
et* MyFind(const et *first, const et *last, const et &val)
{
if( !first || !last )
return 0;
for( ; first != last; ++first)
if( *first == val )
return first;
return 0;
}
int main()
{
const int size=7;
int iarr[size]={12, 70, 2, 169, 1, 5, 29};
int val=70;
int *pi = MyFind(iarr,iarr+7, val);
cout<<*pi<<endl;
return 0;
}
const et *first 有const编译都过不去!错误是const int*---int*!~
去掉const!一切皆OK~!为什么!`
但是去掉const是存在风险的!所以想不去掉const!`其中原由希望能得到详细点解答及解决之道! 在线等答案~!
[解决办法]
const et *first
这里是const
return first; 然后你企图把他作为一个非const的返回,
你这么做才有风险呢。
[解决办法]
#include <iostream>#include <cstring>using namespace std;template <typename et> const et* MyFind(const et *first, const et *last, const et &val) { if (!first || !last) return 0; for (; first != last; ++first) if (*first == val) return first; return 0; } int main() { const int size = 7; int iarr[size] = {12, 70, 2, 169, 1, 5, 29}; int val = 70; const int *pi = MyFind(iarr, iarr+7, val); cout<<*pi<<endl; return 0; }
[解决办法]
这样:你的返回的et不是一个const指针,这样的话就不能返回,要加上const
同时int *pi = MyFind(iarr,iarr+7, val); 这里你得到pi仅仅是想输出,不妨
也加上const,其实是你想用const实现安全,但编译器也想,所以你把const int*赋给int *
当然编译器不允许了,代码如下:
#include<iostream>using namespace std;template <typename et> const et* MyFind(const et *first, const et *last, const et &val) { if( !first || !last ) return 0; for( ; first != last; ++first) if( *first == val ) return first; return 0; } int main() { const int size=7; int iarr[size]={12, 70, 2, 169, 1, 5, 29}; int val=70; const int *pi = MyFind(iarr,iarr+7, val); cout <<*pi <<endl; return 0; }