2010-09-15 1 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

+0

Извините за мой бедный английский. – Liu

+0

@ Liu: Не позволяйте своему бедному английскому языку отговаривать вас от попыток выразить свой вопрос. 1) Практика делает совершенным. 2) Сейчас нам нечего ответить. – Potatoswatter

ответ

4

линий, как:

void some_function(); 

просто объявить функцию, которая будет определена позже. Функции необязательно должны быть объявлены вне области действия.

+0

Что мне действительно интересно, так это то, что он находится в функции defintion? – Liu

+1

@Liu: Нет, это * объявление * - он просто объявляет, что существует некоторая функция с именем 'some_function', которая возвращает' void' и не принимает никаких параметров. Определение предположительно находится где-то позже в том же файле. –

+0

Спасибо, извините за мой плохой C++! – Liu

1

Это просто объявление функции, как вы думали. Обычно (и рекомендуется) помещать объявления функций в файлы заголовков, но это отнюдь не требуется. Они могут находиться в функциональных органах.

1

Определить функцию, возвращающую thread объект:

std::thread f() 
{ 

Объявите extern функцию без аргументов не возвращаются void (как правило, это не делается в локальной области, но это справедливо):

void some_function(); 

Запустите нить, выполняющую эту функцию, и верните ей ручку:

return std::thread(some_function); 
} 

То же самое дело, как и раньше:

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

Но это не действует. Вы не можете сделать копию потока, так что технически это не нормально, чтобы создать локальный объект thread, а затем вернуть его. Я был бы удивлен, если бы это скомпилировалось, но если это произойдет, это может сломаться при создании для отладчика.

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

Это будет работать, хотя:

return std::move(t); 
+0

Благодарим вас за подробное объяснение! – Liu

Смежные вопросы