Локальная переменная локальной области видимости

Рассмотрим следующий код:

#include <iostream>
#include <thread>

using std::cout;
using std::thread;

thread_local int a;

void foo()
{
a = a + 1;
cout  << a << "\n";
}

void bar()
{
cout << a << "\n";
}

void baz()
{
cout << "Something\n";
}

int main()
{
thread first(foo);
thread second(bar);
thread third(baz);
second.join();
first.join();
third.join();
cout << a;
}

демонстрация

поскольку a имеет длительность хранения потока, у нас есть по крайней мере три различных объекта, обозначенных и используемых в first, second а также main потоки. Мы не используем a внутри third, Есть ли инициализированный нулями a который можно использовать в третьем? Я задаю этот вопрос, потому что я не могу найти ничего об этом в Стандарте:

Нелокальные переменные с продолжительностью хранения потока инициализируются как
следствие выполнения потока.

Определена ли реализация?

1

Решение

N3337, 3.7.2.2

Переменная с продолжительностью хранения потока должна быть инициализирована до
его первое использование odr (3.2) и, если оно будет построено, должно быть уничтожено
выход из нити.

3.2.2 слишком длинный, чтобы скопировать его здесь, но, по сути, его нельзя использовать «odr», если он не появляется в исполняемом коде. Так что это (обязательно) не инициализируется чем-то.

2

Другие решения


По вопросам рекламы [email protected]