1)

Lambda表達式具體形式如下:

    [capture](parameters)->return-type{body}

  如果沒有參數,空的圓括弧()可以省略.返回值也可以省略,如果函數體只由一條return語句組成或返回類型為void的話.形如:

     [capture](parameters){body}

關於capture裡面的值如何獲取:

[] //未定義變數.試圖在Lambda內使用任何外部變數都是錯誤的.

[x, &y] //x 按值捕獲, y 按引用捕獲.

[&] //用到的任何外部變數都隱式按引用捕獲[=] //用到的任何外部變數都隱式按值捕獲[&, x] //x顯式地按值捕獲. 其它變數按引用捕獲[=, &z] //z按引用捕獲. 其它變數按值捕獲

2) thread 庫

g++ test.cc -std=c++11 -pthread

a) detach 和 lambda[=]

capture的導入方式為=(拷貝)
運行結果

b) detach 和 lambda[&]

capture導入方式為& (引用)

運行結果

c) join 和 lambda[&]

明顯的2)中的局部變數被銷毀了,在後臺運行的線程還沒有完成,但是主thread已經完成了。以detach的方式執行線程時,要將線程訪問的局部數據複製到線程的空間(使用值傳遞)


推薦閱讀:
相關文章