Как узнать или проверить, будет ли перемещен определенный типC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Как узнать или проверить, будет ли перемещен определенный тип

Сообщение Anonymous »

Я не ищу черту типа для подвижных типов и не правил автоматической генерации операций движения. То, что я ищу, является общим руководством, чтобы узнать, будет ли определенный тип перемещен или скопирован, или способ разобраться в его тестировании.

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

void f(std::string) { ... }
void f_c(const std::string) { ... }

void g()
{
f(std::string("Hello world!"));   // moved, isn't it?
f("Hello world!");                // moved, isn't it?
f_c(std::string("Hello world!")); // moved, isn't it?
f_c("Hello world!");              // moved, isn't it?
}
До C ++ 11 Приведенный выше код будет включен в std :: string от временного значения к одному, переданщему в f и f_c , от c ++ 11 и далее. f_c .
Иногда пользователи пытались заставить семантику перемещения с помощью функции std :: move :

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

std::string return_by_value_1()
{
std::string result("result");
return std::move(result); // Is this moved or not?
}

std::string return_by_value_2()
{
return std::move(std::string("result")); // Is this moved or not?
}
Но std :: move ничего не перемещает 1 : он только преобразует lvalues в ссылки на rvalues, если целевой тип не реализует семантику перемещения: нет операции движения ... и afaik std :: move out return_by_value_x

Подробнее здесь: https://stackoverflow.com/questions/284 ... o-be-moved
Ответить

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

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

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

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

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