Контейнеры STL назначаются копией? [дубликат]C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Контейнеры STL назначаются копией? [дубликат]

Сообщение Anonymous »

Недавно я столкнулся с некоторыми проблемами при чтении исходного кода потока MSVC STL. Меня очень смущает то, как поток реализует копирование параметров. Он явно использует совершенную пересылку, а совершенная пересылка является ссылкой. Вот часть исходного кода потока:

Код: Выделить всё

template 
void _Start(_Fn&& _Fx, _Args&&... _Ax) {
using _Tuple                 = tuple;
auto _Decay_copied           = _STD make_unique(_STD forward(_Fx), _STD forward(_Ax)...);
constexpr auto _Invoker_proc = _Get_invoke(make_index_sequence{});

_Thr._Hnd =
reinterpret_cast(_CSTD _beginthreadex(nullptr, 0, _Invoker_proc, _Decay_copied.get(), 0, &_Thr._Id));

if (_Thr._Hnd) { // ownership transferred to the thread
(void) _Decay_copied.release();
} else { // failed to start thread
_Thr._Id = 0;
_Throw_Cpp_error(_RESOURCE_UNAVAILABLE_TRY_AGAIN);
}
}
Я обнаружил, что часть копирования данных реализована в конструкции контейнера кортежа.

Код: Выделить всё

auto _Decay_copied           = _STD make_unique(_STD forward(_Fx), _STD forward(_Ax)...);
Я не понимаю, почему он передает ссылки на контейнер, почему он получает копию данных?
Я сделал следующее попытки:

Код: Выделить всё

#include 
#include 
#include 

template 
void add(T&& t)
{
std::vector decay_copid{std::forward(t)};
decay_copid[0]++;
}

template 
void wrapper(T&& t)
{
add(std::forward(t));
}

int main() {
double d = 1.0;
double& ref = d;

std::tuple test{ref};
std::cout 

Подробнее здесь: [url]https://stackoverflow.com/questions/78745702/are-stl-containers-assigned-by-copy[/url]
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»