先上**:
1 #include 2 #include 34void add(int &i)510
11int
main()
12
結果:
in main, befor add, i: 1in add, befor ++i, i: 1
in add, after ++i, i: 2
in main, after add, i: 1
可以看到雖然函式形參是引用方式,但執行緒並沒有改變主函式中的變數。
將第15行**改為
15 boost::thread thre(add, boost::ref(i));
後,輸出:
in main, befor add, i: 1in add, befor ++i, i: 1
in add, after ++i, i: 2
in main, after add, i: 2
可以推測:thread啟動函式時,使用和bind一樣的方式進行引數繫結。雖然形參是引用方式,但是如果不使用ref(),結果依然是值傳遞。
而在c++ std中,前一種呼叫方式會引發編譯錯誤。如果確實有這種需求,可以借助bind函式:
1 #include 2 #include 34void add(int &i) 910
11int
main()
12
Android中Service和Thread的區別
rlei 把service等同於thread或process是乙個非常常見的誤解。需要 強調又強調 的第一點是,android的service是乙個context,並不必然等於乙個額外的thread 裡面專門強調 為什麼強調說 longer running 的 component 非常明顯,這裡是和...
C 中的std詳解
與大家分享下,希望可以幫助大家學習c 引例 includeint main 1.std是什麼?std 是個命名空間標示符,c 標準庫中的函式或者物件都是在命名空間std中定義的,所以我們要使用標準函式庫中的函式或物件都要使用std來限定。物件count是標準函式庫所提供的物件,而標準庫在名字空間中被...
C 中的std詳解
與大家分享下,希望可以幫助大家學習c 引例 includeint main 1.std是什麼?std 是個命名空間標示符,c 標準庫中的函式或者物件都是在命名空間std中定義的,所以我們要使用標準函式庫中的函式或物件都要使用std來限定。物件count是標準函式庫所提供的物件,而標準庫在名字空間中被...