int main()
{
thread_local int n;
}
上面的代碼在C++ 11中是合法的。爲什麼C++ 11允許你聲明一個局部變量爲thread_local?
根據cppreference:
的
thread_local
關鍵字僅允許在 命名空間範圍中,在框範圍,以及靜態數據成員 聲明對象聲明的對象。
我只是想知道:
局部變量始終是當前線程的堆棧,所以它總是線程本地。在這種情況下,thread_local int n;
與int n;
完全相同。
爲什麼C++ 11允許聲明局部變量thread_local
,而不是明確禁用它,以避免濫用?
本地並不意味着自動存儲時間。實際上,thread_local定義了一個新的存儲持續時間,就像'static'一樣。 – chris
「本地化並不意味着自動存儲時間。」,任何示例? – xmllmx
'void foo(){static int s; }'''s'不會被銷燬,直到程序結束時,假設調用了'foo'以便創建's'。它不會放在函數的堆棧框架上 - 那會太早摧毀它。 'thread_local'是'static'或者**隱式**自動持續時間的替代存儲持續時間。僅僅因爲它是隱式的並不意味着它總是那個 - 你可以明確地將其改變,例如,改爲線程本地。我正在使用'static',因爲它可能更加熟悉。你可以通過相同的方式來思考'thread_local',但是每個線程都可以代替全局。 – chris