回 帖 发 新 帖 刷新版面

主题:谁能让这个答案不神奇

在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]
还会有编译错误。

回复列表 (共1个回复)

沙发

几天了...怎么都没有只字片语呢?

我来回复

您尚未登录,请登录后再回复。点此登录或注册