主题:谁能让这个答案不神奇
在VC6下的代码,实际运行得到的答案,让我费解。所以称之为神奇,哪位达人解释一下,把这个问题说通~~?
[code=c]
#include<iostream>
#include<list>
#include<algorithm>
#include <iterator>
using namespace std;
template<int thevalue>
void add(int& elem)
{
elem+=thevalue;
}
template < typename T >
void add1( T & elem )
{
elem += 1;
}
int main()
{
list<int> coll;
for (int i=1;i<=9;i++)
{
coll.push_back(i);
}
int k = 0;
add1<int>(k);
cout << k << endl;
add<3>(k);
cout << k << endl;
for_each(coll.begin(),coll.end(),add<5> );
copy(coll.begin(),coll.end(),
ostream_iterator<int> (cout," "));
cout << endl;
for_each(coll.begin(),coll.end(),add1<int> );
copy(coll.begin(),coll.end(),
ostream_iterator<int> (cout," "));
return 1;
}
[/code]
答案是什么?
1
6
6 7 8 9 10 11 12 13 14
7 8 9 10 11 12 13 14 15
更奇怪的是,在编译阶段,如果少掉
[code=c]
int k = 0;
add1<int>(k);
add<3>(k);
[/code]
还会有编译错误。
[code=c]
#include<iostream>
#include<list>
#include<algorithm>
#include <iterator>
using namespace std;
template<int thevalue>
void add(int& elem)
{
elem+=thevalue;
}
template < typename T >
void add1( T & elem )
{
elem += 1;
}
int main()
{
list<int> coll;
for (int i=1;i<=9;i++)
{
coll.push_back(i);
}
int k = 0;
add1<int>(k);
cout << k << endl;
add<3>(k);
cout << k << endl;
for_each(coll.begin(),coll.end(),add<5> );
copy(coll.begin(),coll.end(),
ostream_iterator<int> (cout," "));
cout << endl;
for_each(coll.begin(),coll.end(),add1<int> );
copy(coll.begin(),coll.end(),
ostream_iterator<int> (cout," "));
return 1;
}
[/code]
答案是什么?
1
6
6 7 8 9 10 11 12 13 14
7 8 9 10 11 12 13 14 15
更奇怪的是,在编译阶段,如果少掉
[code=c]
int k = 0;
add1<int>(k);
add<3>(k);
[/code]
还会有编译错误。