第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在VS2010下該怎么改才能和DEVCPP一樣???

在VS2010下該怎么改才能和DEVCPP一樣啊?

#include <iostream>#include <list>#include <algorithm>using namespace std;template <class T>void PRINT_ELEMENTS (const T& coll, const char* optcstr =""){typename T::const_iterator pos;std::cout << optcstr;for (pos=coll.begin(); pos!=coll.end(); ++pos) {std::cout << *pos << ' ';}std::cout << std::endl;}class IntSequence{private:int _value;public:IntSequence( int initialValue ) : _value( initialValue ){}int operator()( ){ return _value++; }int value(){ return _value; }};int main(){list< int > coll;IntSequence seq( 1 );generate_n< back_insert_iterator< list<int> >, int,IntSequence& >( back_inserter(coll), 4, seq ); // seq欲傳引用,改變seq._value的值PRINT_ELEMENTS( coll );generate_n( back_inserter(coll), 4, IntSequence(42) );PRINT_ELEMENTS( coll );generate_n( back_inserter(coll), 4, const_cast<IntSequence &>(seq) );PRINT_ELEMENTS( coll );generate_n( back_inserter(coll), 4, const_cast<IntSequence &>(seq) );PRINT_ELEMENTS( coll );}//在dev-cpp下輸出如下:1 2 3 41 2 3 4 42 43 44 451 2 3 4 42 43 44 45 5 6 7 81 2 3 4 42 43 44 45 5 6 7 8 5 6 7 8請按任意鍵繼續(xù). . .//而在VS2010下輸出如下:1 2 3 41 2 3 4 42 43 44 451 2 3 4 42 43 44 45 1 2 3 41 2 3 4 42 43 44 45 1 2 3 4 1 2 3 4請按任意鍵繼續(xù). . .
查看完整描述

1 回答

?
森欄

TA貢獻1810條經(jīng)驗 獲得超5個贊

你說的問題在VS2008上也是相同的表現(xiàn),這個是因為微軟的庫實現(xiàn)不是直接實現(xiàn)在你call的generate_n這個函數(shù)上的,而是有好幾重轉(zhuǎn)調(diào),所以造成你即使對第一重調(diào)用的 模板函數(shù)用 引用去實例化,由于后面轉(zhuǎn)調(diào)的函數(shù)都是使用值去實例化的,所以實際你得到的運行效果還是值語義的。

比如你call 函數(shù) func1<A&>(), 但是由于func1<A&>() 調(diào)用了func2<A>(), 又繼續(xù)調(diào)用了func3<A>(), 最后func3里操作的其實是一個值拷貝,所以影響不到外面的引用的對象。

查看完整回答
反對 回復 2023-04-12
  • 1 回答
  • 0 關(guān)注
  • 203 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號