by reference,by value的问题,请教!

tangshuiling 2009-02-04 10:50:30

代码如下:
#include <iostream>
#include <iterator>
#include <vector>
#include <algorithm>
#include <functional>
using namespace std;
class IntSequence
{
private:
int value;
public:
IntSequence( int init):value(init){}
int operator()()
{
return value++;
}
void getvalue()
{
cout<<value<<endl;
}
};
int main()
{
vector<int> coll;
IntSequence seq(13);
generate_n<back_insert_iterator<vector<int> >,int,IntSequence&>(back_inserter(coll),9,seq);
//by reference方式,对象seq的成员变量value应该会随之变化
seq.getvalue();
//然而,输出value仍然为13,不解,由此对vs2005产生了疑问?
generate_n(back_inserter(coll),9,seq);
copy(coll.begin(),coll.end(),ostream_iterator<int>(cout," "));
return 0;
}


...全文
126 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
tangshuiling 2009-02-07
  • 打赏
  • 举报
回复
看来也没什么好研究的啦,否则,掉入微软挖的坑都不知道
du51 2009-02-05
  • 打赏
  • 举报
回复
自己写个WRAPPER试下.如果可以.那应该是2005的问题..我BOOST的SINGALS库..在2003 2005 2008 全挂....
实在无语了..从网上找了N久.说是BUG.....

#include <iostream>
#include <iterator>
#include <vector>
#include <algorithm>
#include <functional>
using namespace std;

class IntSequence
{
private:
int value;
public:
IntSequence( int init) : value( init ) {}
inline int operator()()
{
return value ++;
}
inline operator int() const
{
return value;
}
};

class MyWrapper
{
public:
MyWrapper(IntSequence &data) : data_(data) {}
MyWrapper(const MyWrapper &rhs) : data_(rhs.data_) {}
inline int operator () () const
{
return data_();
}
private:
IntSequence &data_;
};

int main()
{
vector<int> coll;

IntSequence seq(13);

generate_n(back_inserter(coll),9,MyWrapper(seq));
cout << seq << endl;
copy(coll.begin(),coll.end(),ostream_iterator<int>(cout," "));
return 0;
}
taodm 2009-02-05
  • 打赏
  • 举报
回复
google cuj专栏文章“Effective Standard C++ Library: Explicit Function Template Argument Specification and STL A New Language Feature and Its Impact on Old Programming Techniques”
wylxxt 2009-02-04
  • 打赏
  • 举报
回复
或者说generate_n就是以拷贝机制执行的,我印象中常用STL算法只有for_each()是以引用机制工作的,貌似是这样,手头无资料可查,不能保证正确性。。。
wylxxt 2009-02-04
  • 打赏
  • 举报
回复
应该不是vs2005的问题,我用vs2008和LZ同样问题。我觉得可能是generate_n内部机制的问题。
yangkunhenry 2009-02-04
  • 打赏
  • 举报
回复
VS2005编译器都没理睬你的那个引用又拷贝了一份吧?
Dev-C++正确执行了lz的程序

64,643

社区成员

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

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