Какова цель атрибута [[msvc::intrinsic]]?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Какова цель атрибута [[msvc::intrinsic]]?

Сообщение Anonymous »

Когда я использовал visual studio 2022, я заметил, что

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

std::moveФункция 
[/b] определяет

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

[[msvc::intrinsic]]Атрибут 
[/b] как макрос.

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

/std:c++latest
приводит к некоторому нестандартному поведению
То есть время жизни временного объекта продлевается, но в принципе вызов функции перемещения имеет возврат, не может быть продлен.
Я попробовал стандартную опцию переключения, но получилось то же самое.
Вот демо, которое я написал, заменив

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

std::move
[/b] с моим собственным mmove, добавив

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

[[msvc::intrinsic]]атрибуты 
[/b] и обычная группа управления.
Я хочу знать, что делает это свойство и почему msvc устроен таким образом.

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

#include

struct A{
~A() { puts(__FUNCTION__); }
};

template //Added an attribute, behavior equivalent to std::move in /std:c++latest, non-standard, extended lifetime
[[msvc::intrinsic]] constexpr std::remove_reference_t&& mmove(Ty&& Arg) noexcept {
return static_cast(Arg);
}

template 
constexpr std::remove_reference_t&& nmove(Ty&& Arg) noexcept {
return static_cast(Arg);
}

int main()
{
{
A&& rvalue = mmove(A{});
puts(__FUNCTION__);
}
puts("------");
{
A&& rvalue = nmove(A{});
puts(__FUNCTION__);
}
}
введите здесь описание изображения
Я с нетерпением жду подробного объяснения свойств '[[msvc::intrinsic]]'.>
Ответить

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

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

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

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

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