2010-09-15 136 views
2
std::thread f() 
{ 
    void some_function(); // <- here 
    return std::thread(some_function); 
} 

std::thread g() 
{ 
    void some_other_function(int); // <- here 
    std::thread t(some_other_function,42); 
    return t; 
} 
+0

我認爲有可能是一個編輯衝突...對不起...但我沒有看到問題的兩種方式。你能否至少在代碼中添加一條評論來說明你認爲奇怪或缺失的內容? – Potatoswatter 2010-09-15 02:15:34

+0

對不起,我英文很差。 – Liu 2010-09-15 02:17:16

+0

@Liu:不要讓你可憐的英語阻止你試圖表達你的問題。 1)練習完美。 2)現在,我們沒有什麼可回答的。 – Potatoswatter 2010-09-15 02:18:13

回答

4

線,如:

void some_function(); 

簡單地聲明這將在後面定義的函數。函數不一定要在函數範圍之外聲明。

+0

我真正想知道的是它在函數定義中? – Liu 2010-09-15 02:23:43

+1

@Liu:不,它是*聲明* - 它只是聲明有一個名爲'some_function'的函數返回'void'並且不帶任何參數。這個定義大概是在同一個文件後面的某個地方。 – 2010-09-15 02:24:47

+0

謝謝,對不起我的不好的C++! – Liu 2010-09-15 02:31:35

1

這只是一個函數聲明,就像你想的那樣。將函數聲明放在頭文件中是常見的(也是推薦的),但這絕不是必需的。他們可能在職能部門。

1

定義一個函數返回一個thread對象:

std::thread f() 
{ 

聲明一個extern功能不帶參數返回void(通常這不是在局部範圍內進行的,但它是有效的):

void some_function(); 

啓動一個執行該函數的線程,並返回一個句柄:

return std::thread(some_function); 
} 

同一交易前:

std::thread g() 
{ 
void some_other_function(int); 

但這是無效的。你不能創建一個線程的副本,所以從技術上講,創建一個本地對象然後返回它並不好。如果編譯出來,我會感到很驚訝,但如果這樣做的話,它可能會在您爲調試器構建時破壞。

std::thread t(some_other_function,42); 
return t; 
} 

這會工作,但:

return std::move(t); 
+0

謝謝您的詳細解釋! – Liu 2010-09-15 02:32:54

相關問題